mysql用in效率低?

2021-07-29 11:13:13 字數 1434 閱讀 3766

子查詢指的是乙個查詢是另外乙個查詢的條件,之間關係是用in來構建

雖然有時候用explain顯示是用到索引 但是看到rows的時候就發現還是掃瞄了最外邊表中的大多數數資料 (這種情況出現在了mysql5.5和5.6版本裡邊。5.7得到了優化)

看兩個例子

update 

task_manager 

inner join 

(select 

task_id 

from

task_details_manager 

where task_state = '5' 

and client_id = clientid) detail 

on task_manager.id = detail.task_id set task_state = '90',

update_date = date_add(

date_format(now(), '%y-%m-%d %h:%i:%s'),

interval floor(rand() * 5) minute

),task_state_record = (

case

right(task_state_record, 2) 

when '90' 

then task_state_record 

else concat(task_state_record, ",90") 

end) ;

和update 

task_manager 

settask_state = '90',

update_date = date_add(

date_format(now(), '%y-%m-%d %h:%i:%s'),

interval floor(rand() * 5) minute

),task_state_record = (

case

right(task_state_record, 2) 

when '90' 

then task_state_record 

else concat(task_state_record, ",90") 

end) 

where id in 

(select 

task_id 

from

task_details_manager 

where task_state = '5' 

and client_id = clientid) ;

這兩個sql在高低版本的mysql查詢速度截然不同 第乙個掃瞄了1行 但是第二個卻掃瞄了1260000行。

另外發現update 居然也可以用inner 不得不驚嘆mysql實在太靈活了

select 為什麼效率低

索引知識延申 3.索引是建的越多越好嗎 增大網路開銷 有時會誤帶上如log iconmd5之類的無用且大文字字段,資料傳輸size會幾何增漲。如果db和應用程式不在同一臺機器,這種開銷非常明顯 即使 mysql 伺服器和客戶端是在同一臺機器上,使用的協議還是 tcp,通訊也是需要額外的時間。準確來說...

通過MySQL慢查詢日誌定位執行效率低的SQL語句

利用命令 show variables like query 檢視是否開啟慢查詢日誌 slow query log on表示開啟,off表示關閉 long query time 單位秒,如果查詢超過此處設定的秒數,則會被寫入到慢查詢日誌中 slow query log file 慢查詢日誌的目錄 如...

虛函式效率低的原因

設想一下,如果說不是虛函式,那麼在編譯時期,其相對位址是確定的,編譯器可以直接生成jmp invoke指令 如果是虛函式,多出來的一次查詢vtable所帶來的開銷,倒是次要的,關鍵在於,這個函式位址是動態的,譬如 取到的位址在eax裡,則在call eax之後的 那些已經被預取進入流水線的所有指令都...