Я работаю над запросом, которому необходимо подключить 4 больших стола.MySQL, как я могу сделать этот запрос быстрее?
Таблицы:
Table_1 (ID, активный, price1, price2, имя, категория1, категория2) Это главная таблица, которая имеет все продукты, 32561 строк
table_2 (ID, table_1_ID, room, stock) Это таблица, содержащая запас продуктов в таблице_1, эта таблица может иметь table_1.ID несколько раз, 190400 строк
table_3 (ID, table_1_ID, изображения) Эта таблица содержит больше информации о продукте, как образы, некоторые продукты не имеют их, 6546 строк
table_4 (table_1_ID, вид, тип) Эта таблица содержит вид продукции (просмотров в месяц)
что я хочу:
Я пытаюсь сделать запрос, который отображает 20 из наиболее популярных и продуктов.
Условия:
- Это может отображать только продукты, которые находятся в table_1.category1 (А, В, С, D, Е)
- Это может отображать только продукты, которые активны = 'T "
- Он может отображать только те продукты, которые находятся в комнате LJ0001 и MS0001
- Он может отображать только продукты, которые имеют по крайней мере один запас
Код:
SELECT DISTINCT(Table_1.ID), Table_1.price1, Table_1.price2
, Table_1.name, Table_1.category2, Table_3.images
FROM Table_1
LEFT JOIN Table_2 ON Table_1.ID=Table_2.table_1_ID
LEFT JOIN table_3 ON table_1.ID=table_3.table_1_ID
LEFT JOIN table_4 ON table_1.ID=table_4.table_1_ID
WHERE Table_1.active='T'
AND (Table_1.category1 LIKE 'A%'
OR Table_1.category1 LIKE 'B%'
OR Table_1.category1 LIKE 'C%'
OR Table_1.category1 LIKE 'D%'
OR Table_1.category1 LIKE 'E%'
)
AND table_2.room IN ('LJ0001','MS0001')
AND table_2.stock!=0
ORDER BY table_4.view DESC, Table_1.name
LIMIT 10 OFFSET 0
Примечание:
Код выше работ. Но это займет некоторое время. Я ищу любые исправления, которые могли бы сделать это быстрее.
Любая помощь будет приятной! Спасибо заранее.
EXPLAIN EXTENDED
Какие индексы у вас есть на разных таблицах? Индекс имеет большое значение в отношении этого. Вы используете внешние ключи? – h2ooooooo
Начните с отображения индексов на каждой таблице, а не только столбцов; а затем выполните EXPLAIN запроса и покажите результаты этого, чтобы увидеть, какие индексы используют запрос. –
Возможно, вам потребуется добавить некоторые индексы. Используйте 'explain extended' с последним запросом, чтобы выяснить, что лучше всего индексировать. – aynber