MariaDB/MySQL: le Performance di COUNT()

English version

Quanto è rapida l’esecuzione di COUNT()? Beh, dipende dallo Storage Engine.

Provate a creare una tabella Aria o MyISAM, inserire un po’ di dati (bastano poche righe) ed eseguire una EXPLAIN simile a questa:

MariaDB [(none)]> EXPLAIN SELECT COUNT(*) FROM test.t1;
+------+-------------+-------+------+---------------+------+--------+------+------+------------------------------+
| id   | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra                        |
+------+-------------+-------+------+---------------+------+--------+------+------+------------------------------+
|    1 | SIMPLE      | NULL  | NULL | NULL          | NULL | NULL    | NULL | NULL | Select tables optimized away |
+------+-------------+-------+------+---------------+------+--------+------+------+------------------------------+
1 row in set (0.10 sec)

Optimized away in questo caso significa che non è necessario accedere ai dati della tabella, perché il numero delle righe è scritto nei metadati. Perciò il risultato viene restituito immediatamente.

Per COUNT(colonna), la tabella non viene ottimizzata via – a meno che la colonna sia NOT NULL e ci sia la parola chiave DISTINCT, ma allora è un sinonimo di COUNT(*).

InnoDB non può ottimizzare via le tabelle dalle query di questo tipo, perché ha un modo più complesso di gestire i dati. Ma naturalmente può utilizzare gli indici per contare i valori.

Gli Storage Engine che ottimizzano via le operazioni COUNT() sono: Aria, MyISAM, MEMORY, e quella brutta cosa chiamata MRG_MyISAM. Gli Storage Engine che devono invece accedere alle tabelle sono: InnoDB, XtraDB, Archive e CSV. (Ma ho fatto solo un rapido test sugli engine di default di MariaDB 5.5)

Questo è un problema per te? Prima di passare ad Aria o MyISAM, è meglio prendere in considerazione almeno un’alternativa: mantenere il numero delle righe in una tabella MEMORY molto piccola senza cambiare lo Storage Engine della tabella originale.

Divertitevi!

About these ads

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...