sql >> Databáze >  >> RDS >> Mysql

MySQL:Nejrychlejší způsob, jak spočítat počet řádků

Když COUNT(*) bere v úvahu indexy sloupců, takže to bude nejlepší výsledek. Mysql s MyISAM engine ve skutečnosti ukládá počet řádků, nepočítá všechny řádky pokaždé, když se pokusíte spočítat všechny řádky. (na základě sloupce primárního klíče)

Používat PHP k počítání řádků není moc chytré, protože do php musíte posílat data z mysql. Proč to dělat, když můžete dosáhnout stejného na straně mysql?

Pokud COUNT(*) je pomalý, měli byste spustit EXPLAIN na dotaz a zkontrolujte, zda jsou indexy skutečně používány a kam by měly být přidány.

Následující není nejrychlejší způsobem, ale existuje případ, kdy COUNT(*) opravdu nesedí - když začnete seskupovat výsledky, můžete narazit na problém, kde COUNT ve skutečnosti nepočítá všechny řádky.

Řešením je SQL_CALC_FOUND_ROWS . To se obvykle používá, když vybíráte řádky, ale přesto potřebujete znát celkový počet řádků (například pro stránkování). Když vybíráte datové řádky, stačí připojit SQL_CALC_FOUND_ROWS klíčové slovo po SELECT:

SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;

Poté, co vyberete potřebné řádky, můžete počet získat pomocí tohoto jediného dotazu:

SELECT FOUND_ROWS();

FOUND_ROWS() musí být voláno ihned po dotazu na výběr dat.

Závěrem lze říci, že vše ve skutečnosti závisí na tom, kolik záznamů máte a co je v příkazu WHERE. Měli byste opravdu věnovat pozornost tomu, jak se indexy používají, když existuje mnoho řádků (desítky tisíc, miliony a více).



  1. Jak používat proměnnou tabulky v dynamickém příkazu SQL?

  2. Jak získat seznam dat mezi dvěma daty v dotazu na výběr mysql

  3. Pochopení dávkových operací JDBC

  4. Vložte, pokud neexistuje Oracle