2016-05-11 9 views
0

Ich habe folgende Abfrage zu einem MySQL-Server gemacht.Gleicher Server, Gleiche Abfrage, warum habe ich eine andere Ausführungszeit für die Abfrage erhalten?

select ORDER_ID,CUSTOMER_ID,PRICE,AMOUNT,ITEM_ID,ORDER_TIME 
from MY_ORDER order by ORDER_ID desc limit 10000; 

Die ORDER_ID ist der Primärschlüssel der Tabelle.

Normalerweise dauert es etwa 20 ms, um diese Abfrage auszuführen (keine Abrufzeit). Aber manchmal dauerte es mehr als 60 ms.

Meine Frage ist: Unter der gleichen Abfrage, der gleiche Server, das gleiche Schema, was könnte der Grund für solche langsame Ausführung irgendwann sein?

Antwort

-1

Sie machen Indizes auf Order_id, customer_id, ITEM_ID

+0

Ich sehe nicht, wie das mit dem, was gefragt wurde, zu tun hat. –

0

Warum unterschiedliche Ausführungszeiten? Es gibt viele möglich Gründe ...

Ist die Tabelle InnoDB? Oder MyISAM? (Meine Antworten müssen sich möglicherweise ändern.)

Diese Abfrage trifft möglicherweise 100 Datenblöcke. Angenommen, Sie verwenden InnoDB, wie groß ist innodb_buffer_pool_size? Wenn es nicht viel größer als 100 Blöcke (1-2 MB) ist, kann ein anderer Prozess dazu führen, dass die Blöcke aus dem Cache entfernt werden, was ein erneutes Laden von der Festplatte erforderlich macht. Ein solcher I/O ist wesentlich langsamer als das Lesen aus dem Cache.

Konnte eine andere Operation auf diesem Tisch, vielleicht eine Zeile einfügen, mitkommen? Obwohl InnoDB sehr gut darin ist, mehreren Threads (Verbindungen) zu erlauben, mit der gleichen Tabelle zu sprechen, zahlt es manchmal einen Kostenfaktor.