關於查詢最佳化的一些總結

DaiWK發表於2024-04-09
一、程式最佳化
熱點資料使用快取
資料庫讀寫分離
二、資料庫方面的最佳化
1、資料庫設計最佳化
如果單表資料量過大,可以根據業務來做分表
資料庫表可以做一些欄位冗餘,可以減少連表查詢,提升查詢效率
2、Sql語句最佳化
2.1.首先定位慢查詢
開啟慢查詢日誌 mysql
slow_query_log:是否開啟慢查詢
slow_query_log_file:慢查詢日誌儲存路徑
long-query-time:慢查詢閾值,當查詢時間大於閾值時會記錄到日誌
第三方監測工具
2.Sql最佳化
1、避免使用select *,只查需要的列
2、如果不需要去重儘量使用union all(union會去重,遍歷耗時)
3、子查詢改用連表查詢(子查詢會生成臨時表)
4、深分頁查詢可以將上一頁最大Id作為where條件
5、開啟執行計劃檢視查詢是否走索引,根據執行計劃設定合理的索引
索引如何設定:根據 where條件+group by條件+order by條件來設定組合索引,組合索引欄位順序根據查詢欄位熱點來
避免索引失效:
1)遵循最佳左字首法則:如果使用組合索引,查詢條件必須按組合索引欄位排序
2)不在索引列上做任何計算操作
3)使用like時不要以萬用字元開頭('%xx')
4)避免使用is not null或者!=(資料表欄位null可以改用0代替)
5)儲存引擎不能使用索引中範圍條件右邊的列
6)不要使用OR(可以改用union all)

相關文章