3.1 索引特點
很容易想到 mysql 索引可以大大提高檢索速度
優點:1.通過建立唯一索引,保證資料表每行資料的唯一性
2.大大加快資料查詢速度
3.在使用分組和排序進行資料查詢時,可以顯著減少查詢中分組和排序的時間
缺點:1.維護索引需要耗費資料庫資源
2.索引需要占用磁碟空間,索引檔案可能比資料庫檔案更快達到最大檔案尺寸
3.當對資料表進行增刪改時,因為要維護索引,所以速度會受到影響
3.2 分類
索引是在儲存引擎中實現的,即不同的儲存引擎會使用不同的索引
儲存引擎 myisam 和 innodb 只支援 btree 索引,不能更換
儲存引擎 memory/heap 支援 btree 和 hash 索引
2.1 全文索引(fulltext)
只有在 myisam 引擎上才能使用,只能在 char、varchar、text 型別欄位上使用全文索引
就是在一堆文字中,通過其中的關鍵字找到該欄位所屬的記錄行
舉個栗子:「我去年買了個表,還買了個包」,通過「表」就可能可以找到該條記錄,這裡說的是可能,是因為全文索引的使用涉及了很多細節,但大致是這個意思
2.2 單列索引
① 普通索引(normal):基本索引型別,沒有什麼限制,允許定義索引的列中插入重複值和空值,純粹是為了查詢速度快一點
② 唯一索引(unique):索引列中的值是唯一的,允許空值
③ 主鍵索引:一種特殊的索引,不允許有空值
2.3 組合索引
在表中的多個欄位上建立的索引,只有在查詢條件中使用了建立索引時的第乙個字段,索引才會被使用,使用符合索引時遵循最左字首集合
2.4 空間索引
空間索引是對空間資料型別的字段建立的索引,mysql 中的空間資料型別有四種:geometry、point、linestring、polygon
建立空間索引時,使用 spatial 關鍵字,建立空間索引的列必須宣告為 not null,且引擎必須為 myisam
3.3 索引操作
格式:
create
table table_name[col_name data type]
// 建立表語句
[unique|fulltext|spatial]
// 建立什麼樣的索引
[index|key]
// 索引關鍵字
[index_name]
// 索引名字
(col_name[length]
)// 對哪個字段設定索引
[asc|desc]
// 對索引進行排序
unique:可選,表示索引為唯一性索引
fulltext;可選,表示索引為全文索引
spatial:可選,表示索引為空間索引
index 和 key:用於指定欄位為索引,兩者選擇其中之一就可以了,作用是一樣的
index_name:可選,給建立的索引取乙個新名稱。
col_name:指定索引對應的字段的名稱,該欄位必須是前面定義好的字段
length:可選,指索引的長度,必須是字串型別才可以使用
asc:可選,表示公升序排列
desc:可選,表示降序排列
舉個栗子:
① 建立普通索引
create
table
book
( bookid int
notnull
, bookname varchar
(255
)not
null
,authors
varchar
(255
)not
null
, info varchar
(255
)null
,comment
varchar
(255
)null
, year_publication year
notnull
,index
(year_publication)
// 對欄位 year_publication 設定索引
)
檢視表結構:
show
create
table book
結果:
② 建立組合索引
create
table
person
( id int
notnull
, name varchar
(255
)not
null
, *** char(1
)not
null
,index
(name, ***)
// 對欄位 name、*** 建立索引
)
檢視表結構:
show
create
table person
結果:
如上圖所示,建立組合索引時,不設定索引名字,生成的索引預設以第乙個欄位來命名
檢視索引是否在使用
向 book 表中插入一條資料
insert
into
book
values(12
,'nihao'
,'nihao'
,'文學'
,'henhao'
,1990
)
使用 explain 語句檢視索引是否有在使用
explain
select
*from book where year_publication =
1990
結果:
explain 語句輸出結果的各個行的解釋如下:
select_type: 表示查詢中每個 select 子句的型別(簡單 or 複雜)
type:表示 mysql 在表中找到所需行的方式,又稱「訪問型別」,常見型別如下:(從上至下,效果依次變好)
possible_keys :指出 mysql 能使用哪個索引在表中找到行,查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢使用
key: 顯示 mysql 在查詢中實際使用的索引,若沒有使用索引,顯示為null
key_len :表示索引中使用的位元組數,可通過該列計算查詢中使用的索引的長度
ref :表示上述表的連線匹配條件,即哪些列或常量被用於查詢索引列上的值
rows :表示 mysql 根據表統計資訊及索引選用情況,估算的找到所需的記錄所需要讀取的行數
extra :包含不適合在其他列中顯示但十分重要的額外資訊 如 using where,using index
③ 略…
第七周總結
在本週的學習之中,我愈發的感覺前端的內容之廣闊,知識量確實不少,但這些知識可以通過不同方式的應用實現各種各樣的功能,就拿線面的乙個花瓣來說。裡面的東西確實不複雜,但實現的效果卻是相當可觀的 body wrap hua07 huaban wrap hover hua01 wrap hover hua0...
第七周總結
2019第七周作業 本週作業頭 這個作業屬於那個課程 c語言程式設計ii 這個作業要求在 我在這個課程的目標是 理解指標陣列和位址之前的關係及應用 這個作業在那個具體方面幫助我實現目標 practice 參考文獻 教科書6 2 每個單詞的最後乙個字母改成大寫 10 分 函式fun的功能是 將p所指字...
第七周總結
這個作業屬於哪個課程 班級的鏈結 如2020 2021 1資訊保安專業導論 這個作業要求在 作業要求的鏈結 如2020 2021 1資訊保安專業導論第七周作業 這個作業的目標 寫上具體方面 作業正文 本部落格鏈結 第八章抽象資料型別與子程式1 資料結構 一種抽象資料型別中的復合資料域的實現。2 容器...