2014-04-09 13 views
8

ho cercato per questo e tutto lo stato una sorta di percentuale, spiegare questo:MySQL SPIEGARE EXTENDED colonna filtrato (ovviamente non è una percentuale)

EXPLAIN EXTENDED SELECT * FROM PageAccess ORDER BY AccessId DESC LIMIT 20; 
SELECT COUNT(*) FROM PageAccess; 

Dare:

id, select_type, table, type, possible_keys, key, key_len, ref, rows, filtered, Extra 
1, 'SIMPLE', 'PageAccess', 'index', '', 'PRIMARY', '4', '', 20, 9295.00, '' 

(Sì, filtrato = 9295,00)

e:

1830 

Per count (*)

Sì voglio le ultime 20 righe, AccessID è la chiave primaria auto-incrementato.

Che cosa significa 9295 !?

risposta

12

Fonte http://dev.mysql.com/doc/refman/5.5/en/explain-output.html#explain_filtered

La colonna filtrato indica una percentuale stimata delle righe della tabella che saranno filtrati dalla condizione tavolo. In altre parole, righe mostra il numero stimato di righe esaminate e le righe × filtrate/100 mostrano il numero di righe che verranno unite alle tabelle precedenti. Questa colonna viene visualizzata se si utilizza EXPLAIN EXTENDED.

Nel 100% filtrato significa che tutte le righe da questa tabella vengono filtrate. Quindi ottenere un valore più alto non è preoccupante poiché è un buon segno, significa che lo non deve leggere più dati dalla tabella.

Ecco come è calcolato. Supponi di avere un tavolo chiamato users Consente di eseguire alcune analisi su di esso.

mysql> select count(*) from users ; 
+----------+ 
| count(*) | 
+----------+ 
| 79309 | 
+----------+ 

Si può vedere ci sono 79309 righe della tabella. Ora lascia correre spiegare

mysql> explain extended select * from users order by idusers desc limit 20 ; 
+----+-------------+-------+-------+---------------+---------+---------+------+------+-----------+-------+ 
| id | select_type | table | type | possible_keys | key  | key_len | ref | rows | filtered | Extra | 
+----+-------------+-------+-------+---------------+---------+---------+------+------+-----------+-------+ 
| 1 | SIMPLE  | users | index | NULL   | PRIMARY | 4  | NULL | 20 | 396545.00 |  | 
+----+-------------+-------+-------+---------------+---------+---------+------+------+-----------+-------+ 

Ora chiedendo perché filtered = 396545.00

Bene il calcolo è semplice.

La tabella ha righe totali = 79309 dice il suo tx.

La spiegazione mostra righe = 20 dice il suo tx1.

Il filtrato è calcolato come

(tx/tx1)*100 = 396545.00 

Quindi, se questo valore è alto significa che la query è buono e non leggendo tutto dal tavolo.

Quindi non confondere questo non è il numero di righe che la query sembrerà un calcolo relativo di% sul numero di righe disponibili per il numero di righe recuperate.

Se diventa 100, significa che la query sta cercando tutte le righe disponibili nella tabella.

+1

Quindi il 20% significa ... 80% significa ... (per mostrare il contrasto) e se è * ahem * OVER 9000! –

+0

@AlecTeal non hai ottenuto come è calcolato. Controlla la mia risposta aggiornata !! –

+0

Quindi cosa significa filter = 78? (Inoltre, immagino che le righe siano il numero effettivamente visualizzato, non ciò che restituisce la query. Quindi il 78% significa che quelle che sembrava il 78% erano utili - quindi valori alti significa che ha ottenuto MOLTO uso dei dati?) –

-4

Quando EXPLAIN viene utilizzato con la parola chiave EXTENDED, l'output include una colonna filtrata non visualizzata in altro modo. Questa colonna indica la percentuale stimata delle righe della tabella che verranno filtrate in base alla condizione della tabella.