Ускорить объединение столов - PullRequest
0 голосов
/ 18 мая 2018

Работая, чтобы объединить 3 таблицы, мне удается получить свои результаты при объединении первых двух:

SELECT so.id, so.title, so.cat, sr.img
FROM extended_details AS so
JOIN details AS sr ON so.id = sr.id
LIMIT 6

Проблема возникает, когда я пытаюсь присоединиться к третьей таблице следующим образом:

SELECT so.id, so.title, so.cat, sr.img
FROM extended_details AS so
JOIN details AS sr ON so.id = sr.id
JOIN scores AS se ON sr.id = se.id 
ORDER BY score_sec DESC
LIMIT 6

Это, кажется, занимает вечность, и я никогда не получаю свои результаты, каждая таблица имеет около 300 тыс. Идентификаторов, и я пробовал коррелированные подзапросы, но я боюсь, что это может занять больше времени.

Проблема, кажется, в ORDERBY, поскольку при запуске

SELECT so.id, so.title, so.cat, sr.img, se.score
        FROM extended_details AS so
        JOIN details AS sr ON so.id
        JOIN scores AS se ON se.id = sr.id
        LIMIT 6

проблем нет.

1 Ответ

0 голосов
/ 18 мая 2018

Учитывая отсутствие подробностей в вопросе, нет информации о первичных ключах, уникальных или других индексах ...

Мы подозреваем, что отсутствие подходящих индексов приводит к очень неэффективному плану выполнения.


Предложения:

  • Добавить некоторые соответствующие индексы.

  • Используйте EXPLAIN, чтобы просмотреть план выполнения длязапрос.

  • Без подходящего индекса для ORDER BY col потребуется операция «Использование сортировки файлов» для (как сообщается) большого набора.

  • предложение LIMIT применяется почти как последний шаг после сортировки всего набора результатов.

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