J'écris une application webshop multistore en PHP/MYSQL. La table des produits a environ un million de disques, actuellement j'ai 5 magasins avec tous les produits dedans et environ 3 magasins avec quelques produits. Le prix du produit varie parfois d'un magasin à l'autre. Parce qu'il devrait être possible d'ajouter ou de supprimer certains produits, disons seulement le magasin 2, j'ai créé une table de jonction. Mes tables ressemble à ceci:Accélérer la requête de recherche (grande table de jonction)
products(id,name,description,price,media) ~1M records
stores(id,name)
products_stores(id,product_id,store_id,price) ~5M records
Lorsque vous recherchez des produits, la requête prend environ 20 secondes. J'ai ajouté des index aux produits (nom, description) + products_stores (product_id, store_id). Y a-t-il un moyen d'accélérer le processus? La plupart des enregistrements dans products_stores sont identiques (à l'exception du store_id), mais je souhaite le garder flexible.
La requête:
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
J'ai ajouté un index de texte intégral dans le seul nom et a supprimé la ORDER BY, mais il semble faire aucune différence. Mes indices sont maintenant:
Products(name) BTREE
Products(name,description) FULLTEXT
Products(name) FULLTEXT
EXPLIQUEZ de la requête ci-dessus donne: (avec des indices) http://i.stack.imgur.com/8Fe8C.gif
Merci à l'avance et désolé pour mon mauvais anglais.
pouvez nous montrer la requête d'affichage de 20 secondes? – sled
sûr, j'ai ajouté la requête. – Kaduna
Vous êtes autorisé à mettre des sauts de ligne dans les requêtes. Cela peut vous faciliter la vie. :) – GolezTrol