[英]Mysql converting subquery into dependent subquery
嗨我不明白,為什么給定查詢的子查詢轉換為依賴子查詢。
雖然子查詢不依賴於主查詢(不使用主查詢表)。
我知道這個查詢可以使用連接進行優化,但在這里我只是想知道這個的原因
MYSQL Version 5.5
EXPLAIN SELECT id FROM `cab_request_histories`
WHERE cab_request_histories.id = any(SELECT id
FROM cab_requests
WHERE cab_requests.request_type = 'pickup')
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY cab_request_histories index NULL PRIMARY 4 NULL 20
2 DEPENDENT SUBQUERY cab_requests unique_subquery PRIMARY PRIMARY 4 func 1
我懷疑ANY關鍵字將要求MySQL將子查詢外部的值傳遞到其中以評估結果是否為true。
Mysql優化器對此查詢使用EXIST策略,有效地將其更改為:
SELECT id FROM cab_request_histories
WHERE EXISTS
( SELECT 'this one is dependent' FROM cab_requests
WHERE cab_requests.request_type = 'pickup'
AND cab_requests.id = cab_request_histories.id )
您可以使用EXPLAIN EXTENDED your_query
然后SHOW WARNINGS
查看優化程序對您的查詢執行的操作。
http://dev.mysql.com/doc/refman/5.5/en/subquery-optimization-with-exists.html中描述了這種類型的優化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.