Mysql索引整理
MySQL中索引的優點和缺點和使用原則
優點:
1、所有的MySql列型別(欄位型別)都可以被索引,也就是可以給任意欄位設定索引
2、大大加快資料的查詢速度
缺點:
1、建立索引和維護索引要耗費時間,並且隨著資料量的增加所耗費的時間也會增加
2、索引也需要佔空間,我們知道資料表中的資料也會有最大上線設定的,如果我們有大量的索引,索引檔案可能會比資料檔案更快達到上線值
3、當對錶中的資料進行增加、刪除、修改時,索引也需要動態的維護,降低了資料的維護速度。
其實核心總結起來就一句話:索引也是一種資料結構。
索引的分類
MyISAM和InnoDB儲存引擎:只支援BTREE索引, 也就是說預設使用BTREE,不能夠更換 (我們資料庫預設的索引型別其實是innoDB)
MEMORY/HEAP儲存引擎:支援HASH和BTREE索引
1、索引我們分為四類來講 單列索引(普通索引,唯一索引,主鍵索引)、組合索引、全文索引、空間索引。
1.1、單列索引:一個索引只包含單個列,但一個表中可以有多個單列索引。 這裡不要搞混淆了。(比如我們的主鍵id)
1.1.1、普通索引:
MySQL中基本索引型別,沒有什麼限制,允許在定義索引的列中插入重複值和空值,純粹為了查詢資料更快一點
1.1.2、唯一索引:
索引列中的值必須是唯一的,但是允許為空值,
1.1.3、主鍵索引:
是一種特殊的唯一索引,不允許有空值。
1.2、組合索引
在表中的多個欄位組合上建立的索引,只有在查詢條件中使用了這些欄位的左邊欄位時,索引才會被使用,使用組合索引時遵循最左字首集合。這個如果還不明白,等後面舉例講解時在細說(左字首)
1.3、全文索引
全文索引,只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT型別欄位上使用全文索引,介紹了要求,說說什麼是全文索引,就是在一堆文字中,通過其中的某個關鍵字等,就能找到該欄位所屬的記錄行
四、使用索引的注意事項
使用索引時,有以下一些技巧和注意事項:
1.索引不會包含有NULL值的列
只要列中包含有NULL值都將不會被包含在索引中,複合索引中只要有一列含有NULL值,那麼這一列對於此複合索引就是無效的。所以我們在資料庫設計時不要讓欄位的預設值為NULL。
2.使用短索引
對串列進行索引,如果可能應該指定一個字首長度。例如,如果有一個CHAR(255)的列,如果在前10個或20個字元內,多數值是惟一的,那麼就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁碟空間和I/O操作。
3.索引列排序
MySQL查詢只使用一個索引,因此如果where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。因此資料庫預設排序可以符合要求的情況下不要使用排序操作;儘量不要包含多個列的排序,如果需要最好給這些列建立複合索引。
4.like語句操作
一般情況下不鼓勵使用like操作,如果非使用不可,如何使用也是一個問題。like “%aaa%” 不會使用索引而like “aaa%”可以使用索引。
5.不要在列上進行運算
select * from users where YEAR(adddate)<2007;
將在每個行上進行運算,這將導致索引失效而進行全表掃描,因此我們可以改成:
select * from users where adddate<‘2007-01-01’;
6.不使用NOT IN和<>操作
待續