2016-05-11 21 views
0

Ich habe eine große Tabelle, die rund 7 Millionen Datensätze hat. (MySQL)MySQL mit Index-Ausgabe

Spalten gehen wie;

id | atype | textbody | .... 

id Primärschlüssel ist, ist ATYPE Index

wenn I

select * from tablename where `atype`='doit' 

es verwendet ATYPE Index ausgeführt werden. (Es gibt 1,7 Millionen doit Zeilen in der Tabelle)

aber wenn ich diese Abfrage ausführen

select * from tablename where `atype`='doit' or `atype`='payment' 

es den Index nicht nutzen. Ich sage nur, dass movies_index atype ist. (Es gibt 168 Zahlungszeilen in der Tabelle)

Gibt es eine Erklärung für dieses Verhalten?

Wenn ich diese Abfrage ausführen;

select * from tablename where `atype`='paymentfailed' or `atype`='payment' 

Es verwendet Atypeindex.

so, wenn ich 'doit', verwenden Sie es nicht ATYPE Index

+0

Was nützt ein Index ist, wenn Sie versuchen, 1,7 Millionen Datensätze zu greifen? –

+0

Wählen Sie * aus Tabellenname wo 'atype' = 'doit' -> 1,7 Millionen Datensätze wählen Sie * aus Tabellenname wo 'atype' =' Zahlung '-> 168 Datensätze wählen Sie * aus Tabellenname -> 7 Millionen Datensätze –

Antwort

0

MySQL zu Indizes eher heikel ist. Ich denke, es klüger über IN ist eher als OR:

select * 
from tablename 
where `atype` in ('doit', 'payment'); 

Wenn das nicht funktioniert, dann union all verwenden:

select * 
from tablename 
where `atype` = 'doit' 
union all 
select * 
from tablename 
where `atype` = 'payment'; 
+0

Ich versuchte IN auch , sagt immer noch möglich_Tasten atype aber Schlüssel Null –

+0

und ja, ich versuchte Union auch, Union verwendet den Index, möchte ich wissen, warum es den Index für andere Abfragen nicht verwendet? –

+0

Ich habe gerade die Frage aktualisiert und ein paar mehr Details hinzugefügt –