今天寫了個兩個關聯的sql語句,
select * from a join b on a.relationid=b.id where b.otherid=123
a表中的relation跟b表中的id相關聯,當執行時資料庫的執行速度突然便面了,發現這個語句的執行時間特別的長。
最開始的時候認為查詢慢是因為b表中的otherid沒有新增索引導致,a表跟b表中的資料量很大,這個連線查詢導致全表掃瞄,後來檢視發現otherid是有索引的。
然後發現是a表跟b表中關聯的兩個欄位的資料型別不一樣導致在關聯的時候大量的資料需要轉換資料型別,dba給出的優化建議是
select * from a where a.relation in(select cast(id nvarcha 50 ) from b where b.otherid=123) 這種建議中根據otherid這個條件能過濾大部分的資料,在把id的型別轉換成跟a表中relationid一樣,這樣一下從原來的查詢需要兩秒較少的只需要幾毫秒。
總結:1. 資料庫在表表關聯查詢的時候一定要確保關聯的字段的資料型別是一樣的,因為在表關聯的時候如果資料型別不同會進行大量的型別轉換,型別的轉換是很號時間的操作
2 .在進行資料的查詢時候where條件中的語句一定要保持跟條件欄位的型別報錯一致。避免型別轉換
3. 對於複雜的sql語句在優化的時候的一種方法是,可以把具體的邏輯拆分到**邏輯中而不在資料庫中進行大量的計算。例如上面的查詢在**中進行兩次查詢。
資料庫慢查詢
使用mysql慢查日誌對有效率問題的sql語句進行優 mysql show variables like slow query log 檢視伺服器慢查詢日啟 mysql set global slow query log on 開啟慢查詢日誌 mysql set global long query ...
MySql資料庫慢查詢
一 什麼是資料庫慢查詢?資料庫慢查詢,就是查詢時間超過了我們設定的時間的語句。預設的設定時間是10秒。也可以自己根據實際專案設定。set long query time 0.0001 slow query log 是否開啟慢查詢日誌,1表示開啟,0表示關閉。log slow queries 舊版 5...
雲資料庫mysql 慢查詢 Mysql慢查詢
一 簡介 開啟慢查詢日誌,可以讓mysql記錄下查詢超過指定時間的語句,通過定位分析效能的瓶頸,才能更好的優化資料庫系統的效能。二 引數說明 slow query log 慢查詢開啟狀態 slow query log file 慢查詢日誌存放的位置 這個目錄需要mysql的執行帳號的可寫許可權,一般...