索引使用缺點:
雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行insert,update和delete。因為更新表時,mysql不僅要儲存資料,還要儲存一下索引檔案
建立索引會占用磁碟空間的索引檔案。一般情況這個問題不太嚴重,但如果你在要給大表上建了多種組合索引,索引檔案會膨脹很寬
索引只是提高效率的乙個方式,如果mysql有大資料量的表,就要花時間研究建立最優的索引,或優化查詢語句。
注意事項:
1.where字句的查詢條件裡有
not in 、<>、!=
,mysql將無法使用索引;
2.where字句的查詢條件裡使用了函式
,mysql將無法使用索引
3.在join操作中,mysql只有在主鍵和外來鍵的資料型別相同時才能使用索引,否則即使建立了索引也不會使用
4.使用了比較操作符like和regexp,mysql只有在搜尋模板的第乙個字元不是萬用字元的情況下才能使用索引。比如說,如果查詢條件是like 'abc%',mysql將使用索引;如果條件是like '%abc'或者'_abc%',mysql將不使用索引。
5.在order by操作中,mysql只有在排序條件不是乙個查詢條件表示式的情況下才使用索引。儘管如此,在涉及多個資料表的查詢裡,即使有索引可用,那些索引在加快order by操作方面也沒什麼作用。
1>mysql一次查詢只能使用乙個索引。如果要對多個字段使用索引,建立復合索引。
2>在order by操作中,mysql只有在排序條件不是乙個查詢條件表示式的情況下才使用索引。
6.如果某個資料列裡包含著許多重複的值,就算為它建立了索引也不會有很好的效果。比如說,如果某個資料列裡包含了淨是些諸如「0/1」或「y/n」等值,就沒有必要為它建立乙個索引。
7.
使用短索引
:對串列進行索引,如果可以就應該指定乙個字首長度。例如,如果有乙個char(255)的列,如果在前10個或20個字元內,多數值是唯一的,那麼就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁碟空間和i/o操作。(針對hash的索引方式,對每個值都做hash值儲存i/o操作儲存索引資訊)
8.如果條件中有or(並且其中有or的條件是不帶索引的),即使其中有條件帶索引也不會使用(這也是為什麼盡量少用or的原因)。注意:要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引
9.如果列型別是字串,那一定要在條件中將資料使用引號引用起來,否則不使用索引
10.對於那些定義為text、image和bit資料型別的列不應該增加索引。因為這些列的資料量要麼相當大,要麼取值很少。
11.只要列中包含有null值,都將不會被包含在索引中,復合索引中只要有一列含有null值,那麼這一列對於此符合索引就是無效的。
12.組合索引之最左字首:顧名思義,就是最左優先,上例中我們建立了name_age_course多列索引,相當於建立了(name)單列索引,(name,age)組合索引以及(name,age,course)組合索引。在單獨使用(age)、(age,course)等條件下索引無效
mysql索引使用注意事項
單值索引 create index 索引名 on 表名 需要建立索引的字段 復合索引 create index 索引名 on 表名 需要建立索引的字段,需要建立索引的字段,1 不要在索引列上做任何操作 1 不要在索引列使用函式 select sql no cache from a where nam...
mysql索引注意事項
在查詢條件中必須有復合索引還中最左側的列 在建立多列索引時,要根據業務需求,where子句中使用最頻繁的一列放在最左邊 假設你在表的state city和zip資料列上建立了復合索引。索引中的資料行按照state city zip次序排列,因此它們也會自動地按照state city和state次序排...
mysql索引注意事項
1.模糊查詢前導不會走索引 select id,user name,price code from user activity info where user name like zhang 如果非要使用前導索引的話可以借助apache的lucence索引工具 2.欄位預設值不要設定成null 如果...