Я пишу мультимагазиновое приложение для интернет-магазина на PHP / MYSQL. Таблица продуктов насчитывает около миллиона записей, в настоящее время у меня есть 5 магазинов со всеми продуктами в нем и около 3 магазинов с несколькими продуктами. Цена продукта иногда варьируется от магазина к магазину. Поскольку должна быть возможность добавлять или удалять определенные продукты, скажем, только для магазина 2, я создал соединительную таблицу. Мои таблицы выглядят так:
products(id,name,description,price,media) ~1M records
stores(id,name)
products_stores(id,product_id,store_id,price) ~5M records
При поиске товаров запрос занимает около 20 секунд. Я добавил индексы к продуктам (имя, описание) + products_stores (product_id, store_id). Можно ли как-нибудь ускорить процесс? Большинство записей в products_stores одинаковые (за исключением store_id), но я бы хотел сохранить их гибкость.
Запрос:
SELECT
Product.id,
Product.name,
Product.drager,
Product.import,
Product.price,
Product.description,
Product.units
FROM
products AS Product
INNER JOIN
products_stores AS ProductStore ON (
ProductStore.product_id = Product.id
AND
ProductStore.store_id =1
)
WHERE
name LIKE 'bach%'
ORDER BY
Product.description asc
LIMIT
500
Я добавил индекс FULLTEXT только для имени и удалил оператор ORDER BY, но, похоже, это не имеет значения. Мои индексы сейчас:
Products(name) BTREE
Products(name,description) FULLTEXT
Products(name) FULLTEXT
ОБЪЯСНЕНИЕ вышеуказанного запроса дает: (с индексами)
http://i.stack.imgur.com/8Fe8C.gif
Заранее спасибо и извините за мой плохой английский.