自己總結的一些常見的sql優化
1. 盡量不使用select *
2. 選擇最有效率的表名
資料庫的解析器按照從右到左的順序處理from字句中的表名,from字句中寫在最後的表名將最先被解析。
在from字句中包含多個表的情況下:
3. where字句中連線順序
資料庫採用自右向左的順序解析whrer字句,根據這個原理,那些表之間的連線必須寫在左面,
而那些能過濾掉大量資料記錄的必須寫在右面
4. 關於drop,truncate和delete
5. 使用表或列的別名
如果表或列的名稱太長,使用一些簡單的別名可以提高sql的效能
6. 為了獲得相同結果集的多次查詢,請保持前後sql一致
這樣可以充分的利用查詢快取
7. where字句裡面的列盡量被索引
8. order by字句裡面的列盡量被索引
9. join字句裡面的列盡量被索引
10. 避免在索引列上使用計算
where字句中,如果索引列是函式的一部分,優化器將不會使用索引,而使用全表掃瞄,這樣會變慢
11. 總時使用索引的第乙個列
如果索引是建立在多個列上,只有他的第乙個列被where字句引用時,
優化器才會選擇使用索引,如果不引用第乙個列,優化器將使用全表掃面而忽略索引。例如下面這樣就不會使用索引了:
crate index age_grade
on student(age,grade);
select name,age,grade
from student
where grade < 60;
12. 明知道只有一條查詢結果就用limit 1
limit 1會避免使用全表掃瞄,查詢到結果就不會再繼續掃瞄了
13. 使用limit實現分頁邏輯
不僅提高效能,還能減少資料庫和應用之間的網路傳輸消耗
14. 如果查詢結果集允許重複,可以收用union all代替union
union all不去重,效率會高一些
15. 比較運算子能用=就不用<>
增加使用索引的機率
16. 使用in代替or
select * from student where age= 15 or age = 18 or age = 20;
select * from student where age in (15,18,20);
17. 使用》= 代替 >
e.g.
select * from student where age > 17
select * from student where age >= 18
第乙個會首先定位到age = 17的記錄然後掃瞄到第乙個age > 17 的記錄
第二個則直接跳到age = 18 的記錄
還有很多…! SQL語句優化效能調優
在語句很規範的情況下,就是加索引。然後最大的收穫就是使用執行計畫 解釋計畫?explain plan windows 這個工具覺得很厲害。可以檢視索引是否使用如下圖 網上查到的sql語句優化大多數都是為了避免全表查詢,在語句不規範的情況下就算加了索引呢也會全表查詢,所以優化就是避免這種情況的發生 還...
MySQL general log優化效能
原文url 常常遇到這樣的問題 資料庫訪問量很大,想要從sql方面進行優化。往往開發同學會問 能看到哪些sql執行比較頻繁嗎?回道 不能哦,只能看到當前正在執行的sql和慢日誌裡記錄的sql。因為為了效能考慮,一般general log不會開啟。slow log可以定位一些有效能問題的sql,而ge...
使用Recoding Rules優化效能
通過promql可以實時對prometheus中採集到的樣本資料進行查詢,聚合以及其它各種運算操作。而在某些promql較為複雜且計算量較大時,直接使用promql可能會導致prometheus響應超時的情況。這時需要一種能夠類似於後台批處理的機制能夠在後台完成這些複雜運算的計算,對於使用者而言只需...