Heim >Datenbank >SQL >Welche Methoden gibt es zur SQL-Optimierung?

Welche Methoden gibt es zur SQL-Optimierung?

王林
王林Original
2020-07-01 15:55:058940Durchsuche

SQL-Optimierungsmethoden: 1. Vermeiden Sie die Verwendung von [select *], da nutzlose Felder die Abfrageeffizienz verringern. 2. Vermeiden Sie die Verwendung von „in“ und „not in“, Sie können stattdessen zwischen „exists“ und „exists“ wählen , können Sie stattdessen Union wählen.

Welche Methoden gibt es zur SQL-Optimierung?

SQL-Optimierungsmethode:

(empfohlenes Lernen: MySQL-Tutorial)

1 ein Index in der Tabelle, der den Feldern Priorität gibt, die von where und gruppiert nach verwendet werden.

2. Vermeiden Sie die Verwendung von select *. Die Rückgabe nutzloser Felder verringert die Abfrageeffizienz. Wie folgt:

SELECT * FROM t

Optimierungsmethode: Verwenden Sie bestimmte Felder anstelle von * und geben Sie nur die verwendeten Felder zurück.

3. Vermeiden Sie die Verwendung von „in“ und „nicht in“, da dies dazu führen würde, dass die Datenbank-Engine den Index aufgibt und einen vollständigen Tabellenscan durchführt. Wie folgt:

SELECT * FROM t WHERE id IN (2,3)
SELECT * FROM t1 WHERE username IN (SELECT username FROM t2)

Optimierungsmethode: Wenn es sich um einen kontinuierlichen Wert handelt, kann er durch between ersetzt werden. Wie folgt:

SELECT * FROM t WHERE id BETWEEN 2 AND 3

Wenn es sich um eine Unterabfrage handelt, kann sie durch „exists“ ersetzt werden. Wie folgt:

SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.username = t2.username)

4. Vermeiden Sie die Verwendung von oder, da dies dazu führen würde, dass die Datenbank-Engine den Index aufgibt und einen vollständigen Tabellenscan durchführt. Wie folgt:

SELECT * FROM t WHERE id = 1 OR id = 3

Optimierungsmethode: Union kann anstelle von oder verwendet werden. Wie folgt:

SELECT * FROM t WHERE id = 1
UNION
SELECT * FROM t WHERE id = 3

(PS: Wenn die Felder auf beiden Seiten von oder gleich sind, wie im Beispiel. Es scheint, dass die beiden Methoden ungefähr die gleiche Effizienz haben, selbst wenn Union den Index scannt, oder scannt die gesamte Tabelle)

5. Versuchen Sie, Fuzzy-Abfragen am Anfang von Feldern zu vermeiden, die dazu führen, dass die Datenbank-Engine den Index aufgibt und einen vollständigen Tabellenscan durchführt. Wie folgt:

SELECT * FROM t WHERE username LIKE '%li%'

Optimierungsmethode: Versuchen Sie, nach dem Feld eine Fuzzy-Abfrage zu verwenden. Wie folgt:

SELECT * FROM t WHERE username LIKE 'li%'

6. Vermeiden Sie die Beurteilung von Nullwerten, da dies dazu führen würde, dass die Datenbank-Engine den Index aufgibt und einen vollständigen Tabellenscan durchführt. Wie folgt:

SELECT * FROM t WHERE score IS NULL

Optimierungsmethode: Sie können dem Feld einen Standardwert von 0 hinzufügen und den Wert 0 beurteilen. Wie folgt:

SELECT * FROM t WHERE score = 0

7. Versuchen Sie zu vermeiden, Ausdrücke und Funktionsoperationen auf der linken Seite des Gleichheitszeichens in der Where-Bedingung auszuführen, da dies dazu führen würde, dass die Datenbank-Engine den Index aufgibt und einen vollständigen Tabellenscan durchführt. Wie folgt:

SELECT * FROM t2 WHERE score/10 = 9
SELECT * FROM t2 WHERE SUBSTR(username,1,2) = 'li'

Optimierungsmethode: Ausdrücke und Funktionsoperationen können auf die rechte Seite des Gleichheitszeichens verschoben werden. Wie folgt:

SELECT * FROM t2 WHERE score = 10*9
SELECT * FROM t2 WHERE username LIKE 'li%'

8. Wenn die Datenmenge groß ist, vermeiden Sie die Verwendung der Bedingung 1=1. Um die Zusammenstellung von Abfragebedingungen zu erleichtern, verwenden wir normalerweise diese Bedingung standardmäßig, und das Datenbankmodul verwirft den Index und führt einen vollständigen Tabellenscan durch. Wie folgt:

SELECT * FROM t WHERE 1=1

Optimierungsmethode: Verwenden Sie Code, um beim Zusammenstellen von SQL zu beurteilen. Wenn es kein „Wo“ gibt, fügen Sie „Wo“ hinzu.

Das obige ist der detaillierte Inhalt vonWelche Methoden gibt es zur SQL-Optimierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn