##四、索引規范
1. 索引不是越多越好,按實際需要進行創建
> 索引是一把雙刃劍,它可以提高查詢效率但也會降低插入和更新的速度并占用磁盤空間。適當的索引對應用的性能至關重要,而且在MySQL中使用索引它的速度是極快的。遺憾的是,索引也有相關的開銷。每次向表中寫入時(如INSERT、UPDATEH或DELETE),如果帶有一個或多個索引,那么MySQL也要更新各個索引,這樣索引就增加了對各個表的寫入操作的開銷。只有當某列被用于WHERE子句時,才能享受到索引的性能提升的好處。如果不使用索引,它就沒有價值,而且會帶來維護上的開銷。
2. 查詢的字段必須創建索引
> 如:
1、SELECT、UPDATE、DELETE語句的WHERE條件列
2、多表JOIN的字段
3. 不在索引列進行數學運算和函數運算,無法使用索引,導致全表掃描
<code>
例:
SELECT * FROM t WHERE YEAR(d) >= 2016;
由于MySQL不像Oracle那樣支持函數索引,即使d字段有索引,也會直接全表掃描,應改為
SELECT * FROM t WHERE d >= '2016-01-01';
</code>
4. 不在低基數列上建立索引,例如‘性別’
>有時候,進行全表瀏覽要比必須讀取索引和數據表更快,尤其是當索引包含的是平均分布的數據集是更是如此。對此典型的例子是性別,它有兩個均勻分布的值(男和女)。通過性別需要讀取大概一半的行。在種情況下進行全表掃描瀏覽要更快。
5. 不使用%前導的查詢,如like‘%xxx’無法使用索引,導致全表掃描
<code>
低效查詢
SELECT * FROM t WHERE name LIKE '%de%';
----->
高效查詢
SELECT * FROM t WHERE name LIKE 'de%';
</code>
6. 不使用反向查詢,如 not in / not like
> 無法使用索引,導致全表掃描
7. 避免冗余或重復索引
> 聯合索引IX_a_b_c(a,b,c) 相當于 (a) 、(a,b) 、(a,b,c),那么索引 (a) 、(a,b) 就是多余的。
- 說明
- Python編程規范
- Python風格規范
- Python語言規范
- Java編程規范
- 一、命名約定
- 二、常量定義
- 三、格式約定
- 四、OOP約定
- 五、集合處理
- 六、并發控制
- 七、控制語句
- 八、注釋約定
- 九、異常日志
- 十、日志約定
- Android開發規范
- 前端開發規范
- HTML
- JavaScript
- CSS
- MySQL約定
- 一、基本規范
- 二、庫表設計規范
- 三、字段設計規范
- 四、索引規范
- 五、SQL設計規范
- 六、業務字段命名規范
- 開發安全約定
- 一、代碼安全
- 二、移動開發安全
- 三、服務器安全
- 四、安全意識
- 版本管理
- Git使用規范
- 技術實踐及可視化
- 一、Code Review
- 二、單元測試
- 三、自動化測試
- 四、技術債
- 五、CI
- IOS開發規范