2016-05-16 5 views
0

Ich Ausführung der folgenden auf meine INNODB DatenbankAbfrage ohne ORDER BY langsamer?


QUERY OHNE ORDER BY

SELECT SQL_NO_CACHE second_designer 
    FROM itemrow FORCE INDEX(second_designer) 
    WHERE category like '%' 
     and type like '%' 
     and availability like '%' 
    GROUP BY second_designer 

259 results in 0.0286 seconds. 


QUERY MIT ORDER BY DESC

SELECT SQL_NO_CACHE second_designer 
    FROM itemrow FORCE INDEX(second_designer) 
    WHERE category like '%' 
     and type like '%' 
     and availability like '%' 
    GROUP BY second_designer 
    ORDER BY second_designer DESC 

259 results in 0.0008 seconds. 


INDEX

ADD INDEX `second_designer` (`second_designer ` , `availability`, 
          `category`, `type`) USING BTREE 

ERKLÄREN

id select_type table type possible_keys key   key_len ref rows Extra 
1 SIMPLE  itemrow index second_designer second_designer 608 NULL 44521 Using where; Using index 


Warum ist die Abfrage mit order by-Klausel so viel schneller als die ohne?

+0

läuft Diese Frage ist ziemlich bedeutungslos, der Index, den Sie haben, kann nicht in der WHERE-Klausel in irgendeiner Abfrage verwendet werden. Sie haben die Erklärung nur für eine Abfrage gegeben. – e4c5

+0

Die Erläuterung ist für beide Abfragen identisch. Erklärt das nicht auch, dass der Index 'second_designer' benutzt wird? – Pieter

+0

das ist nur für die Gruppe, wenn Sie die eingerückte EXPLAIN-Ausgabe gepostet haben, die klarer wäre – e4c5

Antwort

0

Der Unterschied wurde durch die 'versteckte' LIMIT phpMyAdmin zu allen Abfragen hinzugefügt.

$cfg['MaxRows'] Listed in phpMyAdmin Docs

Nach einer LIMIT explizit die Abfragen Einstellung beide führen die gleichen (259 Ergebnisse in 0,0286 Sekunden).

0

Wenn wir order verwenden, verwendet es Indizes zum Sortieren von Ergebniszeilen. in Ihrer Abfrage ohne Reihenfolge nach Index werden nicht verwendet. das ist die Unterschiedsabfrage, die schneller mit Auftrag durch

Verwandte Themen