mysql索引優化

  1. 更具數據選擇性(unique count / total count),選擇合適字段建立索引。
  2. 提早設計好索引,別等到數據量不少的時候再來建立。
  3. 索引長度儘可能短,減小磁盤空間佔用。
  4. 數據量大,更新頻繁的表不適合建索引。重建索引消耗性能
  5. 使用聯合索引的時候,按照最左前綴原則。最左前綴原則是最左邊的索引值或索引最左側得是常量。
  6. 排序的時候,只選擇建了索引的字段,而且加上索引條件,實現索引覆蓋查詢。
  7. 不要過多建立索引--佔用磁盤空間,更新數據,重建索引開銷更多。
  8. 一個查詢不會引用多個索引,若是有,查詢優化器會有最優解。(我的認爲會找選擇性最高的做爲索引,或者直接組合成組合索引)

 

總結性能

1.  數據選擇性高,索引效率才高優化

2. 數據量大,重建索引消耗性能spa

3. 索引會佔磁盤空間設計

4. 因爲b+tree的特色,因此要符合最左前綴原則排序

5. 索引即便排好序的數據,select的字段是索引字段,能夠實現索引覆蓋查詢(比全表好); 若是使用索引字段排序,效率更高。索引

 

死鎖

innodb的行鎖是創建在索引上的。update沒有用的索引的化,是鎖表。update都會鎖聚簇索引(主鍵、惟一索引)get

InnoDB 引擎,更新操做默認會加行級鎖,行級鎖會對索引加鎖。若是更新語句使用多個索引,行鎖會先鎖非聚簇索引,再鎖聚簇索引。innodb

例子索引死鎖例子效率

相關文章
相關標籤/搜索