Par exemple, je possède la table et les valeurs:complexe mysql requête de sélection 7
CREATE TABLE IF NOT EXISTS `words` (
`wd_id` int(11) NOT NULL,
`st_id` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
----------------------------
| wd_id | st_id |
----------------------------
| 2 | 4 |
----------------------------
| 5 | 4 |
----------------------------
| 7 | 8 |
----------------------------
| 2 | 8 |
----------------------------
| 7 | 9 |
----------------------------
| 2 | 10 |
----------------------------
| 5 | 10 |
----------------------------
wd_id est id mot
st_id est id de la peine
si je sais id de deux mots. Je veux obtenir la liste des phrases qui ont ces mots. par exemple, cet ID est 2 et 5 alors RÉPONSE sera 4 et 10.
Dans cette table sera milions de lignes. J'ai donc besoin d'écrire une question attentivement !!!
ici est question que j'ai écrit:
SELECT st_id
FROM words
WHERE wd_id = 5 AND st_id IN (
SELECT st_id
FROM words
WHERE wd_id = 2
)
Peut-on écrire mieux QUERY? OU QUESTION QUI FONCTIONNERA pour N mots?
ET SI J'INDIQUE DES INDICES POUR wd_id ET st_id COLUMNS cette requête sera plus rapide oui?
ET QUEL TYPE D'INDICES SERAIT BON?
Oui, vous devez ajouter des index à tous les champs que vous utilisez dans votre condition « Où? ». Vous ne remarquerez pas d'augmentation de la vitesse jusqu'à ce que l'ensemble de données commence à croître, car le coût d'une analyse de table complète est faible alors que le nombre d'enregistrements est faible. –