Wählen Sie 10 Mal langsamer beim Umkehren der Bestellung

9

Warum sollte dies ausgewählt werden, nennen Sie es A (0,02406s):

%Vor%

sei 10-mal langsamer als bei umgekehrter Sortierreihenfolge, rufe B , (0.00229s):

%Vor%

und wie könnten Sie A optimieren? Verwenden von InnoDB-Tabellen in MySQL 5.5.

Weitere Informationen folgen.

describe char_kills;

%Vor%

select count(*) from char_kills;

%Vor%

select count(*) from char_kills where rid_first <= 110 and rid_last >= 110;

%Vor%

show indexes from char_kills;

%Vor%

A :

%Vor%

B :

%Vor%

Weitere Permutationen

Langsam:

%Vor%

Schnell:

%Vor%     
Qtax 16.06.2011, 04:30
quelle

1 Antwort

1

Die Antwort, warum dies passiert, ist ziemlich dumm (und offensichtlich in der großen Sendedatenzeit der Problemabfrage):

Stellen Sie sich Ihre Datenbank (die als Datei gespeichert ist, wie Sie wahrscheinlich wissen) als großes rechteckiges Maisfeld vor und Sie stehen davor. Wenn Sie Mais aus Maisplanern pflücken möchten, die sich in den 4 Ecken des Maisfelds befinden, wäre es natürlich langsamer (weil Sie weit laufen müssen), dann den Mais von den Maispflanzen vor Ihnen zu pflücken.

>

In Computern als (in irgendetwas) Abstand ist wichtig, und es ist Ausdruck in IO-Latenz (und "vermisst", um die erwarteten Informationen irgendwo zu finden).

Der Grund für die Langsamkeit ist also: a) Die Problemabfrage muss Daten aus der ganzen Datei lesen (anstatt sequentielle Lesevorgänge wie die schnelle Abfrage)

b) Sie haben Ihre Datenbank kürzlich nicht defragmentiert

c) Ihr Index ist unangemessen definiert

BEARBEITEN : Um es klar zu stellen, die Abfragen finden die benötigten Datensätze fast so schnell, so dass das Problem nicht in der Indizierung oder ihrer Definition (nicht die größte mindestens, versuchen Sie, mehrspaltig zu machen Index, um alle Ihre Spalten nur für den Test einzuschließen), aber wenn die Abfrage sagt "Ok, ich weiß, wo alles jetzt ist, lass mich gehen, um es anzuzeigen" & lt; - dieser Abrufvorgang ist, was einen von ihnen tötet.

    
selion 16.06.2011 05:54
quelle