資料庫表設計不合理,應該加索引的字段沒有加索引
查詢sql語句是不是編寫不合理,查詢的時候沒有加索引
查詢sql語句的條件加了索引,但是查詢的時候沒有命中索引,比如:字首匹配失效、條件欄位做了型別轉換或者使用了函式、使用了範圍查詢等;使用 explain 檢視索引命中情況 ;參考
join的表太多了???
資料庫中的單錶的資料量達到了多少?1000萬?5000萬?是不是考慮分庫分表;參考
分庫分表怎麼選取分片鍵?
分庫分表後怎麼查詢?
分庫分表的演算法?一致性hash環?
分庫分表的節點個數怎麼考慮
程式異常導致大量資料庫連線不能釋放,一直被占用?
引數優化,連線池資源不夠用了
資料庫所在的硬體資源情況:當查詢慢的時候,記憶體佔了多少?mysql磁碟io是不是被其它應用共享且占用高?cpu是不是有負載?
硬體資源本身不夠》加資源
硬體資源因為和其它程序共享,導致資源不夠,可以考慮做資源隔離
硬體資源效能不足,比如磁碟可以考慮換成ssd
網路資源
應用連線資料庫的網路是不是抖動,延時較高
如果資料量真的炒雞大,分庫分表已經不能滿足查詢了,考慮將熱點資料在redis做快取
應用架構調整,把快取模組加進去
如果已經加了快取還是慢,會不會是快取雪崩了?擊穿了?快取命中率低?
快取任然不能滿足查詢要求,比如很多欄位的查詢,可以將查詢字段放到es等大資料元件中,先查es,es拿到資料主鍵id再到mysql中查詢
使用者請求突然增加,導致查詢變慢
上有系統出現bug,導致迴圈呼叫介面做查詢,這個時候是不是考慮異常情況限流
使用者請求真的是大量增加了,公司發展迅猛
資料庫慢查詢
使用mysql慢查日誌對有效率問題的sql語句進行優 mysql show variables like slow query log 檢視伺服器慢查詢日啟 mysql set global slow query log on 開啟慢查詢日誌 mysql set global long query ...
資料庫查詢慢
今天寫了個兩個關聯的sql語句,select from a join b on a.relationid b.id where b.otherid 123 a表中的relation跟b表中的id相關聯,當執行時資料庫的執行速度突然便面了,發現這個語句的執行時間特別的長。最開始的時候認為查詢慢是因為b...
MySql資料庫慢查詢
一 什麼是資料庫慢查詢?資料庫慢查詢,就是查詢時間超過了我們設定的時間的語句。預設的設定時間是10秒。也可以自己根據實際專案設定。set long query time 0.0001 slow query log 是否開啟慢查詢日誌,1表示開啟,0表示關閉。log slow queries 舊版 5...