# 索引設計
1. 非唯一索引按照“i_字段名稱_字段名稱[_字段名]”進行命名。
2. 唯一索引按照“u_字段名稱_字段名稱[_字段名]”進行命名。
3. 索引名稱使用小寫。
4. 索引中的字段數不超過5個。
5. 唯一鍵由3個以下字段組成,并且字段都是整形時,使用唯一鍵作為主鍵。
6. 沒有唯一鍵或者唯一鍵不符合5中的條件時,使用自增(或者通過發號器獲取)id作為主鍵。
7. 唯一鍵不和主鍵重復。
8. 索引字段的順序需要考慮字段值去重之后的個數,個數多的放在前面。
9. ORDER BY,GROUP BY,DISTINCT的字段需要添加在索引的后面。
10. 單張表的索引數量控制在5個以內,若單張表多個字段在查詢需求上都要單獨用到索引,需要經過DBA評估。查詢性能問題無法解決的,應從產品設計上進行重構。
11. 使用EXPLAIN判斷SQL語句是否合理使用索引,盡量避免extra列出現:Using File Sort,Using Temporary。
12. UPDATE、DELETE語句需要根據WHERE條件添加索引。
13. 對長度大于50的VARCHAR字段建立索引時,按需求恰當的使用前綴索引,或使用其他方法。
14. 下面的表增加一列url_crc32,然后對url_crc32建立索引,減少索引字段的長度,提高效率。
```
CREATE TABLE all_url(ID INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
url VARCHAR(255) NOT NULL DEFAULT 0,
url_crc32 INT UNSIGNED NOT NULL DEFAULT 0,
index idx_url(url_crc32));
```
15. 合理創建聯合索引(避免冗余),(a,b,c) 相當于 (a) 、(a,b) 、(a,b,c)。
16. 合理利用覆蓋索引。