Heim > Datenbank > MySQL-Tutorial > Hauptteil

Welche Abfragesituationen in MySQL verwenden den Index nicht?

WBOY
Freigeben: 2023-05-29 21:19:04
nach vorne
2996 Leute haben es durchsucht

mysql Welche Abfragen verwenden den Index nicht?

1 Die Indexspalte ist an der Berechnung beteiligt und verwendet den Index nicht eine Funktion und darf nicht den Index # 🎜🎜#

SELECT `username` FROM `t_user` WHERE age=20;-- 会使用索引
SELECT `username` FROM `t_user` WHERE age+10=30;-- 不会使用索引!!因为所有索引列参与了计算
SELECT `username` FROM `t_user` WHERE age=30-10;-- 会使用索引
Nach dem Login kopieren

3 verwenden. Verwenden Sie die like-Anweisung für die Indexspalte und verwenden Sie möglicherweise nicht den Index

-- 不会使用索引,因为使用了函数运算,原理与上面相同
SELECT username FROM t_user WHERE concat(username,'1') = 'admin1'; 
-- 会使用索引
SELECT username FROM t_user WHERE username = concat('admin','1');
Nach dem Login kopieren

4 , direkter Vergleich zwischen String-Spalten und Zahlen, ohne den Index zu verwenden#🎜 🎜#
SELECT * FROM USER WHERE username LIKE 'mysql测试%'   --走索引
SELECT * FROM USER WHERE username LIKE '%mysql测试'   --不走索引
SELECT * FROM USER WHERE username LIKE '%mysql测试%'  --不走索引
Nach dem Login kopieren

5 Versuchen Sie, ODER-Operationen zu vermeiden, solange ein Feld keinen Index hat, ändern Sie die Anweisung, ohne den Index zu verwenden!

-- stock_code字符串类型带索引
SELECT * FROM `stock_data` WHERE stock_code = '600538'  --走索引
SELECT * FROM `stock_data` WHERE stock_code = 600538  --不走索引
Nach dem Login kopieren

6 wo id !=2 oder wo id <>

-- stock_code带索引,open不带索引
SELECT * FROM `stock_data` WHERE `stock_code` = &#39;600538&#39; OR `open` = 6.62  -- 不走索引
-- stock_code带索引,up_down_pre带索引
SELECT * FROM `stock_data` WHERE `stock_code` = &#39;600538&#39; OR `up_down_pre` = 5.1  -- 走索引
Nach dem Login kopieren

7. Wenn es null ist, kann der Index nicht verwendet werden, wenn er nicht null ist.

SELECT * FROM t_user WHERE username <> &#39;mysql测试&#39;
Nach dem Login kopieren

8. Die Indexspalte verwendet die in-Anweisung und der Index darf nicht verwendet werden.

SELECT * FROM t_user WHERE username IS NULL -- 不走索引
SELECT * FROM t_user WHERE username IS NOT NULL -- 不走索引
Nach dem Login kopieren

Die Situation, in der der Index nicht verwendet wird:

#🎜🎜 #

1. Es gibt keine Abfragebedingungen oder die Abfragebedingungen sind nicht in der Geschäftsdatenbank indiziert, insbesondere bei Tabellen mit großen Datenmengen.

Vorschläge:

1 Wechseln Sie zu indizierten Spalten als Abfragebedingungen

2 Oder indizieren Sie häufig abgefragte Spalten# 🎜🎜##🎜 🎜#

2. Der Abfrageergebnissatz besteht aus den meisten Daten in der Originaltabelle, die mehr als 25 % ausmachen sollten.

Der Abfrageergebnissatz überschreitet die Gesamtzahl Da die Anzahl der Zeilen 25 % beträgt, ist der Optimierer der Ansicht, dass keine Indizierung erforderlich ist.

Vorschlag:

1 Wenn es das Unternehmen zulässt, können Sie die Limitkontrolle nutzen.

2 Gibt es nach geschäftlicher Einschätzung einen besseren Weg? Wenn es keine bessere Lösung zum Umschreiben gibt

3 Versuchen Sie, diese Daten nicht in MySQL zu speichern. Fügen Sie es in Redis ein.

3. Der Index selbst ist ungültig und die Statistiken sind unwirklich.

Der Index verfügt über die Fähigkeit zur Selbstverwaltung, was nützlich ist, wenn Der Tabelleninhalt ändert sich häufig, es kann zu Indexfehlern kommen.

Plan ändern:

Tabellendaten sichern, zugehörige Tabellen löschen und neu erstellen.

4. Abfragebedingungen verwenden Funktionen für Indexspalten oder führen Operationen für Indexspalten aus. Zu den Operationen gehören (+, -, *, /,! usw.)

# 🎜 🎜#

Methode ändern:

Reduzieren Sie die Verwendung von Rechenoperationen wie Addition, Subtraktion, Multiplikation und Division in MySQL.

#5. Implizite Konvertierung führt zu einem Indexfehler. Dies ist auch ein häufiger Fehler, der in der Entwicklung gemacht wird Erstellung Das Feld ist varchar();

-- stock_code数据类型为varchar
SELECT * FROM `stock_data` WHERE `stock_code` IN (&#39;600538&#39;)  -- 走索引
SELECT * FROM `stock_data` WHERE `stock_code` IN (&#39;600538&#39;,&#39;688663&#39;,&#39;688280&#39;)  -- 走索引
SELECT * FROM `stock_data` WHERE `stock_code` IN (大量数据)  -- 不走索引
SELECT * FROM `stock_data` WHERE `stock_code` IN (600538)  -- 不走索引
Nach dem Login kopieren
Änderungsmethode:

Konsultieren Sie mit R&D, und die Anweisungsabfrage entspricht der Spezifikation.

6.<> nicht ohne Indizierung (Hilfsindex)

Methode ändern:

#🎜🎜 # Versuchen Sie, die obige Methode nicht zum Abfragen zu verwenden oder den Index als Filterbedingung auszuwählen.

Separat >, <, in kann oder nicht Es hängt mit der Ergebnismenge zusammen

oder oder in entsprechend dem Unternehmen. Versuchen Sie, es in Union zu ändern.

7.wie „%“. Das Prozentzeichen steht nicht vorne 🎜##🎜🎜 Für Suchanforderungen vom Typ #%linux% können Sie elasticsearch+mongodb verwenden, ein Datenbankprodukt, das auf Suchdienste spezialisiert ist

Das obige ist der detaillierte Inhalt vonWelche Abfragesituationen in MySQL verwenden den Index nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage