2012-03-27 11 views
0

Ich habe eine Tabelle mit 60 Millionen Zeilen. Die Struktur ist wie entryid, date, sourceid, detail, views. (entryid, date, sourceid, detail) ist die PK, und ich habe auch Indizes für jedes Feld außer views.MySQL MyISAM Tabellenindex Kardinalität ist Null

Das Problem ist die Kardinalitäten der vier Indizes sind Null, aber ich bin sicher, dass sie nicht sollten.

Ich frage mich, warum ist das? Und heißt das, der Index funktioniert nicht?

+0

ist null oder Null? – ajreal

+0

Haben Sie versucht, "ANALYZE TABLE" auszuführen, und prüfen Sie es erneut? –

Antwort

0

Es ist möglich, dass die Tabellenstatistik nicht aktualisiert wurde.

Siehe this page on optimizing MyISAM tables:

Um MySQL besser Abfragen zu optimieren, verwenden Sie ANALYZE TABLE oder myisamchk --analyze auf einem Tisch laufen, nachdem sie mit Daten geladen wurde. Aktualisiert einen Wert für jeden Indexteil, der den Durchschnittswert der Zeilen angibt, die denselben Wert haben. (Für eindeutige Indizes ist dies immer 1). MySQL verwendet dies, um zu entscheiden, welcher Index zu wählen ist, wenn Sie zwei Tabellen basierend auf einem nichtkonstanten Ausdruck verbinden. Sie können das Ergebnis aus der Tabellenanalyse überprüfen, indem Sie SHOW INDEX FROM tbl_name und den Cardinality-Wert untersuchen. myisamchk --description --verbose zeigt Informationen zur Indexverteilung an.


Der beste Weg, um zu bestimmen, ob ein Index is to explain a query helfen wird:

mysql> explain select 1; 
+----+-------------+-------+------+---------------+------+---------+------+------+----------------+ 
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra   | 
+----+-------------+-------+------+---------------+------+---------+------+------+----------------+ 
| 1 | SIMPLE  | NULL | NULL | NULL   | NULL | NULL | NULL | NULL | No tables used | 
+----+-------------+-------+------+---------------+------+---------+------+------+----------------+ 
1 row in set (0.00 sec) 
Verwandte Themen