MySql索引注意項

2021-10-06 16:55:08 字數 1277 閱讀 5035

多列索引 有最佳左字首特性 所以盡量左邊的字段是最常用的.

索引不會包括有null值,就是有null,索引就失效

不適合鍵值較少的列(重複資料較多的列)

1.對於多列索引,不使用的第一部分,則索引失效(違反最佳左字首原則)

1.1如果索引了多列,要遵守此規則,指的是從索引最左前列開始並且不跳過索引中的列;

1.2帶頭大哥不能死,中間兄弟不能斷;

2.like查詢以%開頭,索引失效

3.字串不加單引號,索引失效

4.不在索引列上做任何操作 ,否則索引失效

錯誤的例子:select * from test where id-1=9;

正確的例子:select * from test where id=10;

5.!=或者<>(不等於),可能導致不走索引,也可能走 index fast full scan

例如select id from test where id<>100

6.where 子句中使用 is null 或者 is not null

7.如果條件中有or,即使其中有條件帶索引也不會使用(這也是為什麼盡量少用or的原因);要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引,但是列太多了也不會走,舉個例子兩個列會走,三個就不會走,慎用

關於in 使用in在mysql 4.0 以前不會走索引,但是之後都會走的

8.如果mysql估計使用全表掃瞄要比使用索引快,則不使用索引

a.單列索引無法儲null值,復合索引無法儲全為null的值。

b.查詢時,採用is null條件時,不能利用到索引,只能全表掃瞄。

為什麼索引列無法儲存null值?

a.索引是有序的。null值進入索引時,無法確定其應該放在**。(將索引列值進行建樹,其中必然涉及到諸多的比較操作,null 值是不確定值無法

比較,無法確定null出現在索引樹的葉子節點位置。)

b.如果需要把空值存入索引,方法有二:其一,把null值轉為乙個特定的值,在where中檢索時,用該特定值查詢。其二,建立乙個復合索引。例如

create index ind_a on table(col1,1); 通過在復合索引中指定乙個非空常量值,而使構成索引的列的組合中,不可能出現全空值。

參照:

mysql索引要點 MySql索引優化注意要點

設計好mysql索引可以讓資料庫飛起來,大大的提高資料庫效率。設計mysql索引時,建議注意以下幾點 1,建立索引 對於查詢佔主要的應用來說,索引顯得尤為重要。很多時候效能問題很簡單的就是因為我們忘了新增索引而造成的,或者說沒有新增更為有效的索引導致。如果不加 索引的話,那麼查詢任何哪怕只是一條特定...

Mysql使用注意項總結

設計的合理性,能否容忍冗餘字段,盡量一張表,方便開發 考慮使用記錄表,記錄一些查詢和修改的記錄資訊 考慮業務的使用情況,設定相關索引,加速查詢和修改 分庫分表的合理性 儲存量的預估 業務訪問量的預估,是否會造成db的壓力 使用時間戳儲存時間 使用datetime等時間格式,注意時區問題,注意設定資料...

mysql索引注意事項

在查詢條件中必須有復合索引還中最左側的列 在建立多列索引時,要根據業務需求,where子句中使用最頻繁的一列放在最左邊 假設你在表的state city和zip資料列上建立了復合索引。索引中的資料行按照state city zip次序排列,因此它們也會自動地按照state city和state次序排...