? ? ? ? 索引是一種特殊文件包含著所有記錄所使用的指針。就像一本書的目錄一樣,加快書的檢索速度。數據庫如果沒有索引的話幾乎是不能使用的。曾有人戲稱,如果使用索引的mysql是一輛蘭博基尼的話,沒有使用索引頂多就是一個人力三輪。
? ? ? 索引分為聚簇索引和非聚簇索引。聚簇索引提高多行的檢索速度,非聚簇索引提高單行數據的檢索速度。在數據庫的功能中,可以建立三種索引:唯一索引,主鍵索引和聚集索引。
? ? ? 普通索引是一種沒有任何限制的索引,其建立過程:CREATE?INDEX?index_name?ON?table(column(col_name));它是MYIASM數據庫引擎默認的BTREE類型的索引。使用navicat導出mysql數據庫腳本的時候經常會看到這樣的字段。
??唯一索引是在普通索引的基礎上保證索引列的值必須唯一,除主鍵外可以有空值。建立過程:
CREATE?UNIQUE?INDEX?indexName?ON?table(column(length))
索引的利弊:? ? ?
? ? 索引大大提高查詢與排序速度,但是會小號數據保存與更新效率。索引需要生成索引文件,當大量使用組合索引的話,索引文件就會迅速膨脹。 針對這些問題,提出了以下優化方法:
?1. 何時使用聚集索引或非聚集索引?
動作描述 | 使用聚集索引 | 使用非聚集索引 |
列經常被分組排序 | 使用 | 使用 |
返回某范圍內的數據 | 使用 | 不使用 |
一個或極少不同值 | 不使用 | 不使用 |
小數目的不同值 | 使用 | 不使用 |
大數目的不同值 | 不使用 | 使用 |
頻繁更新的列 | 不使用 | 使用 |
外鍵列 | 使用 | 使用 |
主鍵列 | 使用 | 使用 |
頻繁修改索引列 | 不使用 | 使用 |
2. 使用短索引列。
? ? 索引列如果使用varchar(255)的話會讓索引文件變大,不利于檢索,這255個字符中前10或20個字符能夠保證索引唯一的話,就使用這些字段作為索引列即可。
3. like語句
? ? 在數據庫操作中不建議使用like語句,但費用不可時,like”%aaa%”不會使用索引而like“aaa%”則可以使用索引。
4. 不要再索引列執行運算,這樣會導致索引失效。
5. 使用越小越簡單的數據類型越好;盡量避免null;
6. 組合索引僅能對索引最左邊的索引進行有效查詢。如:
? ? 索引列為c1,c2,以下查詢語句有效:
select?*?form?table?where?c1=1?and?c2=2; ? ???select?*?from?table?where?c1=1;
但對于一下查詢語句是無效的:
select?*?from?table?where?c2=2;
?以上就是mysql數據庫-索引的內容,更多相關內容請關注PHP中文網(www.php.cn)!