Methoden für MYSQL zur Vermeidung vollständiger Tabellenscans: 1. Erstellen Sie Indizes für die beteiligten Spalten und sortieren Sie nach; 2. Vermeiden Sie Nullwerturteile für Felder in der Where-Klausel, vermeiden Sie die Verwendung von „!="-Operatoren und vermeiden Sie Verwenden von oder zum Verbinden von Bedingungen; 3. Verwenden Sie „in“ und „nicht in“ mit Vorsicht. 4. Vermeiden Sie die Verwendung von Berechnungen für Indexspalten.
MYSQL vermeidet vollständige Tabellenscans
1 Um Abfragen zu optimieren, sollten Sie zunächst die Erstellung von Indizes für die beteiligten Spalten in „wo“ und „Reihenfolge nach“ in Betracht ziehen. Sollte so weit wie möglich vermieden werden. Nehmen Sie eine Nullwertbeurteilung für das Feld in der where-Klausel vor, andernfalls gibt die Engine die Verwendung des Index auf und führt einen vollständigen Tabellenscan durch. Beispiel: Wählen Sie id aus t aus, wobei num null ist Legen Sie den Standardwert 0 für „num“ fest, um sicherzustellen, dass die „num“-Spalte in der Tabelle keinen Nullwert hat, und führen Sie dann eine Abfrage wie folgt durch: „select id from t where num=0
3“ Versuchen Sie, die Verwendung in der where-Klausel zu vermeiden! = oder-Operator, andernfalls gibt die Engine die Verwendung des Index auf und führt einen vollständigen Tabellenscan durch.
4. Vermeiden Sie die Verwendung von oder in der where-Klausel, um Bedingungen zu verbinden, da die Engine sonst die Verwendung des Index aufgibt und einen vollständigen Tabellenscan durchführt (Sie können Union verwenden).
5 mit Vorsicht, andernfalls wird ein vollständiger Tabellenscan durchgeführt (wenn Sie ihn zwischen verwenden können, verwenden Sie ihn nicht in)
6 Die folgende Abfrage führt ebenfalls zu einem vollständigen Tabellenscan.
Wählen Sie eine ID aus einem T mit einem Namen wie „%李%“ aus. Wählen Sie eine ID aus einem T mit einem Namen wie „%李“ aus.
Um die Effizienz zu verbessern, können Sie dieses Format auch zum Auswählen einer ID aus einem T mit dem Namen „%李%“ verwenden Erwägen Sie die Volltextsuche.
7. Vermeiden Sie die Verwendung von Berechnungen für Indexspalten, das heißt, vermeiden Sie Ausdrucksoperationen und Funktionsoperationen für Felder in where-Klauseln. Dies führt dazu, dass die Engine die Verwendung des Index aufgibt und einen vollständigen Tabellenscan durchführt.
Zum Beispiel: „select id from t where num/2=100“ soll in „select id from t where num=100*2
8“ geändert werden Wird zum Überprüfen von Unterabfragen verwendet. Unabhängig davon, ob mindestens eine Datenzeile zurückgegeben wird, gibt diese Unterabfrage eigentlich keine Daten zurück, sondern einen Wert von „true“ oder „false“.
select num from a where num in(select num from b)
Ersetzen Sie es durch die folgende Anweisung: select num from a where exist (select 1 from b where num=a.num)
9 Verwenden Sie es nirgendwo Wählen Sie aus t aus, ersetzen Sie „“ durch eine bestimmte Feldliste und geben Sie keine nicht verwendeten Felder zurück.
10. Verwenden Sie >= anstelle von>
Effizient: SELECT * FROM EMP WHERE DEPTNO >=4
Ineffizient: SELECT * FROM EMP WHERE DEPTNO >3
Der Unterschied zwischen den beiden besteht darin, dass das frühere DBMS Springt direkt zum ersten Datensatz mit DEPT gleich 4, und dieser sucht zuerst den Datensatz mit DEPTNO=3 und scannt vorwärts zum ersten Datensatz mit DEPT größer als 3.
11. Ersetzen Sie die Have-Klausel durch die Where-Klausel
Empfohlenes Tutorial:
MySQL-Video-TutorialDas obige ist der detaillierte Inhalt vonWie vermeide ich einen Vollbildscan in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!