mysql索引 使用注意事項

2021-08-13 22:18:56 字數 2211 閱讀 4535

索引使用缺點:

雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行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 如果...