mySQL Query Optimization LEFT JOIN - PullRequest
       1

mySQL Query Optimization LEFT JOIN

1 голос
/ 02 марта 2011

Мне нужно получить некоторые данные из таблицы вопросов, а затем ЛЕВОЕ ПРИСОЕДИНИТЬСЯ к продукту ответы. Мне нужен список всех вопросов в определенной категории (всего 16 категорий из примерно 200 категорий), а затем перечислите ответы продукта рядом с вопросами для определенного идентификатора продукта.

SELECT `questions`.`id`, `questions`.`text`, `questions`.`catalogue_id`, `productanswers`.`answer` 

FROM `questions` 

LEFT JOIN `productanswers` ON `productanswers`.`question_id` = `questions`.`id` 

AND product_id = '2001682' 

WHERE `catalogue_id` IN (1234912,1234913,1234914) 

ORDER BY `catalogue_id`

, который возвращает, как я ожидал, примерно 17 результатов. Вопросы без ответа по этому товару заполнены Null, отлично!

Проблема в том, что для выполнения запроса требуется приблизительно 23 секунды: -o сделать полный запрос со всеми вопросами каталога невозможным.

Как мне оптимизировать запрос, или у вас есть другие идеи?

Спасибо, Taff

Ответы [ 2 ]

3 голосов
/ 02 марта 2011

Добавление составного индекса (из нескольких столбцов) для question_id и product_id вместе:

ALTER TABLE productanswers ADD KEY(question_id, product_id)

Примечание. Возможно, вы захотите изменить порядок столбцов в индексе в зависимости от селективностиquestion_id против product_id

Подробнее о составных индексах см. Документы

0 голосов
/ 02 марта 2011

Кроме того, у вас должны быть индексы для всех ваших столбцов идентификаторов, но я думаю, что у вас есть это. Другим источником информации является объяснение: http://dev.mysql.com/doc/refman/5.0/en/using-explain.html

...