MySQL не использует ключи во внешнем запросе вложенного выбора с «IN» - PullRequest
2 голосов
/ 09 марта 2010

Я запрашиваю базу данных так:

 SELECT * from Log WHERE cookieId IN (select cookieId from Log WHERE someId="blafasel");

У меня есть ключи для someId и cookieId, но запрос очень медленный. Если я запускаю два запроса (внешний и внутренний), они разделяются или выполняются очень быстро.

 select cookieId from Log WHERE someId="blafasel"

дает мне результаты почти мгновенно. И так же запрос

 SELECT * FROM Log WHERE cookieId IN ("something","somethingelse","athirdoption")

Использование EXPLAIN говорит мне, что ключи используются в двух отдельных запросах, но для запросов подвыборов ключи используются только для внутреннего выбора. Мой вопрос почему? И как сказать, что MySQL будет немного умнее.

Хорошо, я мог бы позволить моему приложению запускать два запроса по отдельности, но это было бы не удобно.

Спасибо за вашу помощь.

Ответы [ 3 ]

7 голосов
/ 09 марта 2010

Вы пробовали использовать

SELECT  l.*
FROM    log l INNER JOIN
        log ls ON l.cookieid = ls.cookieid
WHERE   ls.someId="blafasel"
0 голосов
/ 16 марта 2010
0 голосов
/ 09 марта 2010

Вы пробовали просто это?

SELECT * from Log WHERE someId="blafasel";

Я полагаю, ваш реальный запрос немного отличается, но на всякий случай это не так.

Кроме того, объяснение показывает правильный ключ в столбце "возможные ключи"? Если это так, вы можете попробовать использовать выражение «force index (index_name)» на внешнем элементе select, чтобы увидеть, ускоряет ли это его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...