Comment Améliorer les Performances des Requêtes avec plusieurs Jointures

J'ai une requête (avec l'objectif de prise de vue) qui est à l'aide d'un peu de joint pour obtenir à chaque colonne. Les performances se dégradent rapidement (de façon exponentielle?) pour chaque ensemble de jointures ajouté.

Ce serait une bonne approche pour faire cette requête la plus rapide? Veuillez voir les commentaires à l'intérieur de la requête.

Si ça aide, c'est à l'aide de l'WordPress DB schéma.

Voici une capture d'écran de l'EXPLIQUER
Comment Améliorer les Performances des Requêtes avec plusieurs Jointures

les PRODUITS de la TABLE

+--+----+
|id|name|
+--+----+
|1 |test|
+--+----+

TABLE de MÉTADONNÉES

+----------+--------+-----+
|product_id|meta_key|value|
+----------+--------+-----+
|1         |price   |9.99 |
+----------+--------+-----+
|1         |sku     |ABC  |
+----------+--------+-----+

TERM_RELATIONSHIPS TABLE

+---------+----------------+
|object_id|term_taxonomy_id|
+---------+----------------+
|1        |1               |
+---------+----------------+
|1        |2               |
+---------+----------------+

TERM_TAXONOMY TABLE

+----------------+-------+--------+
|term_taxonomy_id|term_id|taxonomy|
+----------------+-------+--------+
|1               |1      |size    |
+----------------+-------+--------+
|2               |2      |stock   |
+----------------+-------+--------+

CONDITIONS de TABLE

+-------+-----+
|term_id|name |
+-------+-----+
|1      |500mg|
+-------+-----+
|2      |10   |
+-------+-----+

REQUÊTE

SELECT 
  products.id,
  products.name,
  price.value AS price,
  sku.value AS sku,
  size.name AS size
FROM products

/* These joins are performing quickly */

INNER JOIN `metadata` AS price ON products.id = price.product_id AND price.meta_key = 'price'
INNER JOIN `metadata` AS sku ON products.id = sku.product_id AND sku.meta_key = 'sku'

/* Here's the part that is really slowing it down - I run this chunk about 5 times with different strings to match */

INNER JOIN `term_relationships` AS tr ON products.id = tr.object_id
  INNER JOIN `term_taxonomy` AS tt
  ON tr.term_taxonomy_id = tt.term_taxonomy_id AND tt.taxonomy = 'size'
    INNER JOIN `terms` AS size
    ON tt.term_id = size.term_id
OR peut tuer l'utilisation des index, essayer de réécrire l'aide d'une union.
montrer la sortie de DESC tableName pour chaque table.
ou au moins la sortie de EXPLAIN <your SQL>;
voulez-vous dire ON? Je n'ai pas de OR dans l'exemple.
L'expliquer est sûr, c'est d'une requête différente! Tables vat 2, tt3 ne sont pas présents. -1 jusqu'à ce que vous corriger.

OriginalL'auteur dloewen | 2014-01-03