您好我不明白为什么给定查询的子查询转换为依赖子查询。
虽然子查询在主查询上不依赖(不使用主查询表)。
我知道这个查询可以使用连接进行优化,但在这里我只是想知道这个的原因
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
答案 0 :(得分:1)
我怀疑ANY关键字需要MySQL将子查询外部的值传递到其中以评估结果是否为真。
答案 1 :(得分:1)
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中描述了这种类型的优化。