sql >> Databasteknik >  >> RDS >> Mysql

mysql count prestanda

ta en titt på följande blogginlägg:

1) COUNT(***) vs COUNT(col)
2) Enkla MySQL-prestandatips
3) Snabb räkning(*) för InnoDB

btw, vilken motor använder du?

REDIGERAD: Om teknik för att snabba upp räkningen när du bara behöver veta om det finns ett antal rader. Förlåt, jag hade bara fel med min fråga. Så, när du bara behöver veta, om det finns t.ex. 300 rader efter specifikt tillstånd kan du prova underfråga:

select count(*) FROM
( select 1 FROM _table_ WHERE _conditions_ LIMIT 300 ) AS result

först förminskar du resultatuppsättningen och räknar sedan resultatet; det kommer fortfarande att skanna resultatuppsättningen, men du kan begränsa det (en gång till, det fungerar när frågan till DB är "är här mer eller mindre än 300 rader), och om DB innehåller fler än 300 rader som uppfyller villkoret att frågan är snabbare

Testresultat (min tabell har 6,7 miljoner rader):

1) SELECT count(*) FROM _table_ WHERE START_DATE > '2011-02-01'
returerar 4,2 miljoner i 65,4 sekunder

2) SELECT count(*) FROM ( select 1 FROM _table_ WHERE START_DATE > '2011-02-01' LIMIT 100 ) AS result
returerar 100 i 0,03 sekunder

Nedan är resultatet av förklara-frågan för att se vad som händer där:

EXPLAIN SELECT count(*) FROM ( select 1 FROM _table_ WHERE START_DATE > '2011-02-01' LIMIT 100 ) AS result



  1. Hur man går med två tabeller i MySQL

  2. Hur kan jag utföra en SELECT DISTINCT på alla fält utom en BLOB?

  3. Jämför varchar med röding

  4. Mac OS Sierra virtualenv (python 2.7) pip installation mysqlclient fel