優化慢執行或慢查詢的方法
阿新 • • 發佈:2018-08-15
dml 不用 內容 right int 關註 views class 不能
1、查詢如果慢的建立索引可以提升速度
相當於就是之前一個表數據量比較小,之後數據量大了查詢就變慢,此時在經常用到的字段上加個索引,效率會翻倍很多的
2、建立索引是為了提升速度,所以避免對索引字段進行計算或類型轉化
例如: where a * 5 = 10 可以 轉化為 where a = 10/5
這樣既可以保證業務邏輯也可以繼續使用原索引去操作,所以要避免對索引字段進行計算或類型轉化
3、表的設計尤為重要,避免使用LEFT JOIN 或 RIGHT JOIN去聯表查詢
如果業務邏輯允許,且表裏幾乎無臟數據,那就可以使用JOIN去聯表查詢,而不建議使用LEFT JOIN或RIGHT JOIN去查詢,因為本身它們聯表都是有區別的,建議使用JOIN去聯表,盡量的去提升速度
4、查詢字段時不要全部返回,忌諱使用*,最好是用什麽字段返回什麽地段,也可使得相關業務更加清晰
不建議 select * from table_name;
- 1
因為查詢,返回結果集,都會花費io,還有帶寬一些資源,所以結果集內容少速度也會提升的
5、有些情況對字段的使用比較特殊,建議去建議表達式索引去提供效率
表達式索引,如經常對一個字段進行 lower(字段xxx), 那就可以創建 表達式 lower(字段xxx) 的索引,只有操作可以使用到索引,速度必然會有所提升
6、部分索引其實差不多是聯合索引,幾個字段查詢的值一直都是常量,此時就可以考慮部分索引
如: where a = ‘f‘ and b = ‘2‘
- 1
就可以建立一個 a = ‘f’ and b = ‘2’ 的部分索引,因為業務經常會用到,自然會提升速度
7、分解執行復雜sql,關註執行sql執行時間,關註lock粒度
如一下操作的數據量比較大,不管是DML、DDL語言都得考慮lock的粒度,不能影響線上業務操作,一般都是分布執行,不要為了省事,而導致業務掛掉,那就得不償失了,操作前先查看操作數據量的級別
8、索引的維護(BDA操作範疇)
索引的維護,把一些不用的且占磁盤空間比較大,自然得刪除,或者跟據業務邏輯對某字段的索引算法進行調整再或者使用新的索引去替代老的索引,註意處理同一個字段的兩個索引的優化時,如果存在主從復制的機制在的話,維護索引註意不要影響生產業務
註意:以上優化都是基於不改變原有業務需求所做的優化,否則另換它法去優化
9、常見的幾種索引算法
B-Tree、 Hash、Gist、SP-Gist、Gin、BRin
- 1
要用那種索引,跟據業務邏輯的特點或者字段的類型而定
優化慢執行或慢查詢的方法