Ich zähle Datensätze mit Abfragen wie
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%'
Für jede Zählung muss MySQL die Tabelle durchlaufen, und dies ist ein großes Problem, wenn eine lange Tabelle und zahlreiche Abfragen vorhanden sind.
Ich frage mich, ob es eine Möglichkeit gibt, alle Zählungen in einer Abfrage durchzuführen. In diesem Fall werden alle Zählungen verarbeitet, wenn MySQL über jede Zeile läuft, und es ist nicht erforderlich, die gesamte Tabelle immer wieder zu scannen.
mysql
query
query-performance
count
Googlebot
quelle
quelle
Antworten:
Um eine Zählung für jeden von denen zu erhalten, können Sie versuchen
quelle
Ähnlich wie bei Aarons Lösung, kürzere Syntax:
Der LIKE-Ausdruck ergibt ein boolesches Ergebnis.
TRUE
ist 1 ,FALSE
ist 0 , alsoCASE
ist das hier redundant.quelle
TINYINT
in dieser Geschichte.SUM
Nimmt jede Art von Zahl (sogar float) und erzeugt ein numerisches Ergebnis. Sie könnenSUM
Spalten vomTINYINT
Typ verwenden, um Werte in Tausenden zu erhalten - das ist kein Problem.TINYINT
in dieser Geschichte" war vielleicht kein guter Satz, um damit zu beginnen.SUM
erwähnte Funktion funktioniert in MS SQL Server nicht auf die gleiche Weise. In Transct-SQLSUM
kann nur mit numerischen Spalten verwendet werden.Wenn ich Ihr Bedürfnis richtig verstehe, reicht dies möglicherweise aus:
quelle