Скорость MySQL ВЫБРАТЬ запрос - PullRequest
0 голосов
/ 16 января 2020

У меня запрос MySQL, который сравнивает значения между двумя таблицами. Запрос работает нормально, но он довольно медленный.

Это запрос

SELECT * FROM questions WHERE questions.id NOT IN (SELECT answers.qid FROM answers where answers.account = 'Account') and FIND_IN_SET(questions.lang,'en,de') and category = 'Cat' order by section

Моя структура выглядит так

СТОЛОВЫЕ ВОПРОСЫ

enter image description here

ОТВЕТЫ НА СТОЛ

enter image description here

У меня около 900 записей в обеих таблицах, которые выполняет запрос. Но выполнение запроса составляет 5,8475 секунды.

Мне было интересно, есть ли в моем запросе что-то, что я могу оптимизировать, чтобы ускорить его выполнение.

1 Ответ

1 голос
/ 17 января 2020

Попробуйте:

SELECT questions.*
FROM questions
    LEFT JOIN answers
        ON questions.id = answers.qid AND answers.account = 'Account'
WHERE answers.id IS NULL AND questions.category = 'Cat' AND questions.lang IN('de', 'en')
ORDER BY questions.section

Я предполагаю, что LEFT JOIN вместо NOT IN() быстрее, как предположил Хакерман в своем комментарии. Также я предполагаю, что IN() быстрее, чем FIND_IN_SET, но я не проверял и не исследовал его.

...