簡體   English   中英

Mysql將子查詢轉換為依賴子查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM