MySQL中的索引優化

MySQL中的SQL的常見優化策略html

MySQL中的索引優化數據庫

MySQL中的索引簡介數據庫設計

 

過多的使用索引將會形成濫用。所以索引也會有它的缺點。雖然索引大大提升了查詢速度,同時卻會下降更新表的速度,如對錶進行INSERT、UPDATE和DELETE次數大於查詢次數時,放棄索引。由於更新表時,MySQL不只要保存數據,還要保存一下索引文件。創建索引會佔用磁盤空間的索引文件。通常狀況這個問題不太嚴重,但若是你在一個大表上建立了多種組合索引,索引文件的會膨脹很快。索引只是提升效率的一個因素,若是你的MySQL有大數據量的表,就須要花時間研究創建最優秀的索引,或優化查詢語句。大數據

1 索引不會包含有NULL值的列
只要列中包含有NULL值都將不會被包含在索引中,組合索引中只要有一列含有NULL值,那麼這一列對於此組合索引就是無效的。因此咱們在數據庫設計時不要讓字段的默認值爲NULL。create table table_name(c1 varchar(32) default ‘0’)優化

2 使用短索引
對串列進行索引,若是可能應該指定一個前綴長度。例如,若是有一個CHAR(255)的列,若是在前10個或20個字符內,多數值是唯一的,那麼就不要對整個列進行索引。短索引不只能夠提升查詢速度並且能夠節省磁盤空間和I/O操做。
CREATE INDEX index_name ON table_name (column(length))spa

3 索引列排序
MySQL查詢只使用一個索引,所以若是where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。所以數據庫默認排序能夠符合要求的狀況下不要使用排序操做;儘可能不要包含多個列的排序,若是須要最好給這些列建立複合索引。設計

4 like語句操做
通常狀況下不鼓勵使用like操做,若是非使用不可,如何使用也是一個問題。like 「%aaa%」 不會使用索引,而like 「aaa%」可使用索引。htm

5 不要在列上進行運算
例如:select * from users where YEAR(adddate)<2007,將在每一個行上進行運算,這將致使索引失效而進行全表掃描,所以咱們能夠改爲:select * from users where adddate<’2007-01-01′blog

 

最後總結一下,MySQL只對如下操做符才使用索引:<,<=,=,>,>=,between,in,以及某些時候的like(不以通配符%或_開頭的情形)。而理論上每張表裏面最多可建立16個索引,不過除非是數據量真的不少,不然過多的使用索引也不是那麼好玩的。排序

建議:一個表的索引數最好不要超過6個,若太多則應考慮一些不常使用到的列上建的索引是否有必要。

相關文章
相關標籤/搜索