關於查詢優化的一些思路和總結

一、程序優化
熱點數據使用緩存
數據庫讀寫分離
二、數據庫方面的優化
1、數據庫設計優化
如果單表數據量過大,可以根據業務來做分表
數據庫表可以做一些字段冗餘,可以減少連表查詢,提升查詢效率
2、Sql語句優化
2.1.首先定位慢查詢
 開啓慢查詢日誌 mysql
  slow_query_log:是否開啓慢查詢
  slow_query_log_file:慢查詢日誌存儲路徑
  long-query-time:慢查詢閾值,當查詢時間大於閾值時會記錄到日誌
 第三方監測工具
2.2.Sql優化
1、避免使用select *,只查需要的列
2、如果不需要去重儘量使用union all(union會去重,遍歷耗時)
3、子查詢改用連表查詢(子查詢會生成臨時表)
4、深分頁查詢可以將上一頁最大Id作爲where條件
5、儘可能小表驅動大表
6、儘量不要太多表關聯查詢,可先查出每張表的數據在程序中處理
7、開啓執行計劃查看查詢是否走索引,根據執行計劃設置合理的索引
   索引如何設置: ①where條件中較爲頻繁的字段、order by、group by可以作爲索引
               ②更新頻繁的字段不適合作爲索引(更新數據時也會更新索引信息)
               ③唯一性太差的字段不適合作爲索引(比如:狀態,查詢掃描數據太多,查詢優化器就不會用到索引)
               ④不會出現在where條件中的字段不應該作爲索引
               ⑤where條件+group by條件+order by條件來設置組合索引,組合索引字段順序根據查詢字段熱度來
   避免索引失效:
               1)遵循最佳左前綴法則:如果使用組合索引,查詢條件必須按組合索引字段排序
               2)不在索引列上做任何計算操作
               3)使用模糊查詢like時不要以通配符開頭('%xx'),儘量不要使用全模糊查詢
               4)避免使用is not null或者!=(數據表字段null可以改用0代替)
               5)存儲引擎不能使用索引中範圍條件右邊的列
6)不要使用OR(可以改用union all)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章