Liczę rekordy z zapytaniami takimi jak
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%'
Dla każdej liczby mysql musi przejrzeć całą tabelę, a to jest duży problem, jeśli mamy długi stół i liczne zapytania.
Zastanawiam się, czy istnieje sposób, aby wszystkie liczby były liczone w jednym zapytaniu. W takim przypadku, gdy mysql przechodzi nad każdym wierszem, przetworzy wszystkie liczby i nie trzeba skanować całej tabeli w kółko.
mysql
query
query-performance
count
Googlebot
źródło
źródło
Odpowiedzi:
Aby uzyskać liczbę dla każdego z nich, możesz spróbować
źródło
Podobnie do rozwiązania Aarona, krótsza składnia:
Wyrażenie LIKE daje wynik logiczny.
TRUE
wynosi 1 ,FALSE
wynosi 0 , więcCASE
tutaj jest zbędny.źródło
TINYINT
w tej historii.SUM
pobiera dowolny typ liczby (nawet liczba zmiennoprzecinkowa) i daje wynik liczbowy. Możesz wpisaćSUM
kolumnyTINYINT
typu, aby uzyskać wartości w tysiącach - to nie problem.TINYINT
w tej historii” być może nie było dobrym zdaniem na początek.SUM
wspomniana tutaj funkcja nie działa w ten sam sposób w MS SQL Server. W języku Transct-SQLSUM
można używać tylko z kolumnami numerycznymi.Jeśli dobrze zrozumiem twoją potrzebę, może to załatwi sprawę:
źródło