2016-11-18 2 views
2

Ich führe eine sehr einfache Select-Abfrage auf einige Tabellen von information_schema, aber es dauert immer zu viel Zeit.warum Abfrage auf infomation_schema braucht Zeit?

Zum Beispiel:

select * from REFERENTIAL_CONSTRAINTS Grenze 3;

Es dauert etwa 34 Sekunden.

Diese Abfrage ist sehr einfach, keine Notwendigkeit Tabelle Scan denke ich, keine Notwendigkeit für eine Bedingung usw. Also, warum es zu viel Zeit braucht.

einige andere Tabellen in information_Schema brauchen auch viel Zeit.

Dank

Antwort

1

Die information_schema Tabellen sind nicht wirklich Tabellen. Sie sind ein Mechanismus, der Server-Interna über die SQL-Schnittstelle verfügbar macht. Die Antworten auf diese Abfragen stammen nicht aus Daten, die "in einer Tabelle gespeichert sind", in einem Sinne, den Sie erwarten könnten - sie werden bei jeder Ausführung der Abfrage "gesammelt".

Die Kommunikationsebene zwischen der SQL-Schicht und den unteren Schichten, die die Daten erfassen, unterstützt nicht immer die Optimierungen, die Sie möglicherweise erwarten. zum Beispiel, die LIMIT hier ist es wahrscheinlich nicht machen - die gesamte Tabelle wird intern gerendert und dann alle außer den ersten drei Zeilen verworfen werden ... so ist diese Abfrage wahrscheinlich genauso langsam mit und ohne das Limit.

Zwei allgemeine Faustregeln mit information_schema - die wirklich für alle SQL gelten, aber insbesondere hier, sind nur die Spalten auszuwählen, die Sie benötigen (nicht *, die möglicherweise erfordern den Server mehr Arbeit als nötig erforderlich Wenn Sie nicht wirklich alle zurückgegebenen Spalten benötigen) und WHERE angeben, können beide die Menge der internen Arbeit reduzieren.

Ein weiterer potenzieller Performance-Killer ist das mühsame Optimieren ("Tuning") von Servervariablen. Die meisten Variablen auf den meisten Systemen müssen oft in Ruhe gelassen werden, als sie sind. Einige von ihnen, wie table_open_cache können sogar dazu führen, dass der Server schlechter arbeitet, je "optimaler" Sie ihn tunen.

+0

Wie table_open_cache in dieser Abfrage Vorteile bietet? Kannst du bitte Erklären ? Öffnet diese Abfrage alle zu scannenden Tabellen? –

Verwandte Themen