2014-04-09 1 views
8

ich dafür habe gesucht und sie alle Zustand eine Art von Prozentsatz, erklären dies:MySQL VERLÄNGERT gefilterte Spalte ERKLÄREN (natürlich ist es nicht ein Prozentsatz)

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

Giving:

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

(Ja, gefiltert = 9295,00)

und:

1830 

Für Anzahl (*)

Ja Ich möchte die letzten 20 Zeilen, AccessId ist der automatisch inkrementierte Primärschlüssel.

Was bedeutet 9295 !?

Antwort

12

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

Die filtrierte Spalte gibt einen geschätzten Anteil von Tabellenzeilen , die durch die Tabelle Zustand gefiltert wird. Das heißt, Zeilen zeigen die geschätzte Anzahl der geprüften Zeilen und Zeilen × gefiltert/100 zeigt die Anzahl der Zeilen, die mit vorherigen Tabellen verknüpft werden. Diese Spalte wird angezeigt, wenn Sie EXPLAIN EXTENDED verwenden.

In der gefilterten 100% bedeutet, dass alle Zeilen aus dieser Tabelle gefiltert werden. So einen höheren Wert zu bekommen ist nicht besorgniserregend, da es ein gutes Zeichen ist, bedeutet es muss nicht so viel Daten aus der Tabelle lesen.

So wird es berechnet. Angenommen, ich habe eine Tabelle mit dem Namen users. Lassen Sie uns eine Analyse durchführen.

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

Sie können sehen, dass 79309 Zeilen in der Tabelle sind. Jetzt lässt erklären laufen

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 |  | 
+----+-------------+-------+-------+---------------+---------+---------+------+------+-----------+-------+ 

jetzt fragen, warum filtered = 396545.00

Nun ist die Berechnung einfach ist.

Die Tabelle hat insgesamt Zeilen = 79309 sagen, dass es tx ist.

Die Erklärung zeigt Zeilen = 20 sagen, es ist tx1.

Die gefilterte wird wie folgt berechnet

(tx/tx1)*100 = 396545.00 

Also, wenn dieser Wert hoch ist, bedeutet die Abfrage gut ist und nicht alles aus der Tabelle zu lesen.

Um nicht zu verwechseln ist dies nicht die Anzahl der Zeilen, die die Abfrage aussehen wird eine relative Berechnung von% über die Anzahl der Zeilen für die Anzahl der abgerufenen Zeilen.

Wenn es 100 wird bedeutet, dass die Abfrage alle verfügbaren Zeilen in der Tabelle sucht.

+1

Also 20% bedeutet ... 80% bedeutet ... (um Kontrast anzuzeigen) was ist wenn es * ahem * ÜBER 9000 ist! –

+0

@AlecTeal Sie haben nicht bekommen, wie es berechnet wurde. Überprüfen Sie meine aktualisierte Antwort !! –

+0

Also was würde gefiltert = 78 bedeuten? (Außerdem rate ich, dass Zeilen die Nummer ist, die sie tatsächlich betrachtet hat, nicht was die Abfrage zurückgibt. Dann waren 78% von denen, die 78% betrachteten, nützlich - so hohe Werte bedeuten, dass es viel von den Daten nutzte?) –

-4

Wenn EXPLAIN mit dem Schlüsselwort EXTENDED verwendet wird, enthält die Ausgabe eine gefilterte Spalte, die sonst nicht angezeigt wird. Diese Spalte gibt den geschätzten Prozentsatz der Tabellenzeilen an, die nach der Tabellenbedingung gefiltert werden.

Verwandte Themen