MySQL 效能 - How to design Indexes, Really
目錄
每每遇到系統資料幅度成長時,就會考慮到效能的問題。
這次將要花心思來學習如何設計 MySQL Index,藉由投影片 How to Design Indexes, Really 做細部了解
關於效能
- Index 是最常在效能上被建議以及需審視的項目
- 在 尚未異動 Schema 以及式碼 的情境下,是用來加速 SQL Query 最簡單的方式
- 最容易在資料庫的開發跟維護上被忽略
Indexing 謬誤
謬誤
-
Index 可以改善效能,所以我替所有欄位都加上 Index- 大部分的 Index 可能都用不到
- 打 Index 時會占硬碟空間
- 當發生 INSERT, UPDATE, DELETE 的語法時,需要修改 Index
- Query Optimizer 會在每個 Query 都參照 Index,這會增加 Query 成本
-
打 Index 會增加成本,所以我不打任何的 Index- 正確(到位)的 index 可以加快 Query 的速度
- 大部分的 Workload 都發生在讀(Read) 的情境,所以 overhead 相較於更新 (update/delete) 上是有益處的
- Indexes 是複合式的能夠更有效率的使用緩衝記憶體
我的 Schema 在這,告訴我如何打 Index ?
- Index 必須要根據
- 你要 Query 的 table 和 columns ?
- 你想要使用怎樣的
JOINs
? - 你需要怎麼樣的
GROUP
BY 和ORDER BY
?
文章系列
- MySQL 效能 - How to design Indexes, Really
- MySQL Index 設計第一節 - 從 Log 分析 Query
- MySQL Index 設計第二節 - 三星評分法則
- MySQL Index 設計第三節 - 檢驗與回顧設計不良的 Index