簡體   English   中英

使用子選擇的MySQL查詢選擇花費的時間太長

[英]MySQL Query Select using sub-select takes too long

從2個表執行select時我注意到了一些奇怪的事情:

SELECT * FROM table_1 WHERE id IN (
    SELECT id_element FROM table_2 WHERE column_2=3103);

此查詢大約需要242秒。

但是當我執行子查詢時

SELECT id_element FROM table_2 WHERE column_2=3103

它花了不到0.002s(並產生了2行)。
然后,當我做的時候

SELECT * FROM table_1 WHERE id IN (/* prev.result */)

它是相同的:0.002s。

我想知道MySQL為什么會這樣做第一個查詢,比最后兩個查詢分別花費更多的時間? 它是根據子查詢結果選擇內容的最佳解決方案嗎?

其他細節: table_1 9000行, table_2有90000行。

table_2column_2上添加索引后,第一個查詢占用了0.15秒。

查詢分析器可能會評估每行的子查詢。

嘗試使用INNER JOIN替換子查詢,看看是否可以提高性能:

SELECT     * 
FROM       table_1 t1
INNER JOIN table_2 t2
ON         t1.id = t2.id_element
           AND t2.column_2 = 3103

這是ver 6之前的mysql中的已知錯誤。

我找到的解決方法是:

SELECT * FROM table_1 WHERE id IN(SELECT id_element FROM(SELECT id_element FROM table_2 WHERE column_2 = 3103)as q)

我也有同樣的問題。 我為表添加了一個INDEX(猜測你已經有)並使用了USE INDEX指令。 在你的情況下,它應該是這樣的:

SELECT * FROM table_1 USE INDEX(id)
WHERE id IN (SELECT id_element FROM table_2 WHERE column_2=3103);

對我來說它讓事情變得更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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