一、為什麼要使用索引
優化查詢,減少掃瞄的錶行數。打個比方,索引的作用就和查新華字典,字典的索引的作用的一樣的。
二、索引的型別
1、索引是在儲存引擎中實現的,而不是在伺服器層中實現的。所以,每種儲存引擎的索引都不一定完全相同,並不是所有的儲存引擎都支援所有的索引型別。
2、如果使用的是組合索引(即有多個列),需要滿足 」最左字首「 的 規則,這和索引的儲存方式 b-tree有關。
三、索引的長度
desc或者explain命令可以檢視索引的key_len:
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | extra |
| 1 | ****** | cry | all | null | null | null | null | 64733 | null |
| 1 | ****** | zd | ref | cry_brzd | cry_brzd | 153 | hospitalinfection.cry.zyid | 1 | null |
key_len為:153
gbk的編碼乙個字元兩個位元組,而utf8編碼的乙個字元三個位元組。筆者的資料庫是utf8編碼,建立索引的字段型別為varchar(50):所以,長度為50*3+3=153
四、索引的不足之處
1、降低了更新表的速度,如對表進行insert、update和delete。因為更新表時,mysql不僅要儲存資料,還要儲存一下索引檔案。
2、建立索引會占用磁碟空間的索引檔案。一般情況這個問題不太嚴重,但如果你在乙個大表上建立了多種組合索引,索引檔案的會膨脹很快。
3、.......
五、其他
1、有些查詢情況下mysql 是不會使用索引的,即使建立了索引:
select * from mytable where username like'admin%' ——未使用索引
select * from mytable wheret name like'%admin'———使用了索引
2、對查詢列使用了mysql函式,或者使用了 not in 、<>等操作符。
3、全文檢索的索引可以建立在text或者varchar欄位上面,配合match...against使用,如果想要匹配中文的話,需要使用分詞器,或者通過pingyin4j這類庫將漢字轉化為拼音,再匹配 etc.
4、......
mysql 雜湊索引 MySQL索引之雜湊索引
雜湊索引 hash index 建立在雜湊表的基礎上,它只對使用了索引中的每一列的精確查詢有用。對於每一行,儲存引擎計算出了被索引的雜湊碼 hash code 它是乙個較小的值,並且有可能和其他行的雜湊碼不同。它把雜湊碼儲存在索引中,並且儲存了乙個指向雜湊表中的每一行的指標。在mysql中,只有me...
mysql主鍵索引 MySQL索引之主鍵索引
在mysql裡,主鍵索引和輔助索引分別是什麼意思,有什麼區別?上次的分享我們介紹了聚集索引和非聚集索引的區別,本次我們繼續介紹主鍵索引和輔助索引的區別。1 主鍵索引 主鍵索引,簡稱主鍵,原文是primary key,由乙個或多個列組成,用於唯一性標識資料表中的某一條記錄。乙個表可以沒有主鍵,但最多只...
mysql聚集索引 MySQL索引之聚集索引介紹
在mysql裡,聚集索引和非聚集索引分別是什麼意思,有什麼區別?在mysql中,innodb引擎表是 聚集 索引組織表 clustered index organize table 而myisam引擎表則是堆組織表 heap organize table 也有人把聚集索引稱為聚簇索引。當然了,聚集索...