Wählen Sie count (*), was erheblich länger dauert als select * für dieselbe "where" -Klausel

9

Ich finde, dass eine Auswahlanzahl (*) erheblich länger dauert als select * für die Abfragen mit derselben Klausel wo .

Die fragliche Tabelle enthält etwa 2,2 Millionen Datensätze (nennen Sie sie detailtable ). Es hat ein Fremdschlüsselfeld, das mit einer anderen Tabelle verknüpft ist ( Haupttabelle ).

Diese Abfrage dauert etwa 10-15 Sekunden:

%Vor%

Aber das dauert eine Sekunde oder weniger:

%Vor%

UPDATE - Es wurde gebeten, die Anzahl der beteiligten Datensätze anzugeben. Es ist 150.

UPDATE 2 Hier finden Sie Informationen, wenn das Schlüsselwort EXPLAIN verwendet wird.

Für SELECT COUNT (*) wird in der Spalte EXTRA Folgendes angezeigt:

%Vor%

KEY und POSSIBLE KEYS haben beide die Fremdschlüsseleinschränkung als Wert.

Für die SELECT * -Abfrage ist alles gleich, außer EXTRA sagt nur:

%Vor%

UPDATE 3 Versucht OPTIMIZE TABLE und es macht immer noch keinen Unterschied.

    
M Schenkel 02.02.2014, 23:54
quelle

2 Antworten

1

Versuchen Sie

%Vor%
  1. count (*) ruft alle Daten aus der Tabelle ab und zählt dann die Zeilen, was bedeutet, dass es mehr Arbeit zu erledigen hat.
  2. Das Verwenden des Primärschlüsselfeldes bedeutet, dass es seinen Index verwendet und schneller ausgeführt werden sollte.
pm_ingram 04.02.2014 11:32
quelle
0

Oder versuchen Sie es einfach

select count(1) from table_name where _condition;

select count('x') from table_name where _condition;

    
Rohit 08.02.2014 21:21
quelle

Tags und Links