冗余索引
已存在索引(A,B)的情況:
- 索引(A)是冗余索引
- 索引(B,A)不是冗余索引
- 索引(B)不是冗余索引
已存在索引(A)的情況:
- ID為主鍵列時,索引(A,ID)是冗余索引
- 索引(A,B)如果是新增索引是冗余索引(最好辦法是在原索引上擴展)
以上情況中的A、B列默認都不是主鍵列。
為什么(A,ID)是冗余索引?
對于MySQL的InnoDB引擎而言,任何二級索引(非主鍵索引)都會包含主鍵列,所以索引(A)和(A,ID)效果是一樣的。
(通過二級索引的查詢,都是首先查找到其所在行的主鍵列,然后去主鍵索引上找到對應的數據)
“大多數情況下都不需要冗余索引,應該盡量擴展已有的索引而不是創建新索引。但也有時候出于性能方面的考慮需要冗余索引,因為擴展已有的索引會導致其變得太大,從而影響其他使用該索引查詢的性能。”
——《高性能MySQL》
總結
- 上一篇: Android 桌面小组件 AppWid
- 下一篇: 数据库自动备份脚本