Je compte les enregistrements avec des requêtes comme
SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%something%'
SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%another%'
SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%word%'
Pour chaque nombre, mysql doit parcourir la table, et c'est un gros problème si vous avez une longue table et de nombreuses requêtes.
Je me demande s'il existe un moyen de faire tous les comptes en une seule requête. Dans ce cas, lorsque mysql parcourt chaque ligne, il traitera tous les décomptes, et pas besoin de balayer la table entière encore et encore.
mysql
query
query-performance
count
Googlebot
la source
la source
Réponses:
Pour obtenir un décompte pour chacun de ceux que vous pouvez essayer
la source
Similaire à la solutio d'Aaron, syntaxe plus courte:
L'expression LIKE donne un résultat booléen.
TRUE
est 1 ,FALSE
est 0 , donc leCASE
est redondant ici.la source
TINYINT
dans cette histoire.SUM
prend n'importe quel type de nombre (même flottant) et produit un résultat numérique. Vous pouvez desSUM
colonnes deTINYINT
type pour obtenir des valeurs par milliers - ce n'est pas un problème.TINYINT
dans cette histoire" n'était peut-être pas une bonne phrase pour commencer.SUM
fonction mentionnée ici ne fonctionne pas de la même manière dans MS SQL Server. Dans Transct-SQLSUM
ne peut être utilisé qu'avec des colonnes numériques.Si je réponds à vos besoins, cela fera peut-être l'affaire:
la source