У меня есть большой набор данных (то есть по 20 миллионов строк в каждой таблице), который выглядит примерно так (я на самом деле не имею дело с продуктами и категориями, но такая же ситуация)
Таблица продуктов
|id|name|created_at|
--------------------
|1 |....|2018-06...|
|2 |....|2018-06...|
|3 |....|2018-06...|
|4 |....|2018-06...|
|5 |....|2018-06...|
...etc.
И таблица категорий
|id|product_id|category|description|
------------------------------------
|1 |1 | abc | def |
|2 |1 | ghi | jkl |
|3 |1 | mno | pqr |
|4 |2 | abc | stu |
|5 |2 | wvx | yz |
...etc
Я хочу выполнить поиск, чтобы найти продукты со многими категориями, т. Е.
SELECT DISTINCTROW * FROM product WHERE
product.id in (
SELECT categories.product_id FROM categories WHERE category = 'abc'
)
AND
product.id in(
SELECT categories.product_id FROM categories WHERE category = 'ghi'
)
AND
product.id in(
SELECT categories.product_id FROM categories WHERE category= 'mno'
)
AND 'some extra where' ORDER BY product.created_au LIMIT 10 offset 0
Но это действительно медленно ... Я пробовал разные подходы к этому, но каждый занимает не менее 30 секунд.
Я составил индекс столбцов, используемых для объединения.
В общем, я хочу сделать поиск, когда товар должен соответствовать одной или нескольким категориям.Кроме того, позже я хочу выполнить поиск, чтобы товар соответствовал категории и описанию (может быть из разных строк в таблице категорий).
Есть идеи?Или, возможно, ссылки, где я могу прочитать больше о таких случаях, как это?