Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ist es richtig, alle Spalten in einer MySQL-Datenbank zu indizieren?

Nein, Sie indizieren nicht alle Spalten. Sie indizieren Spalten, die speziell an einem WHERE beteiligt sind -Klausel, und manchmal, wenn sie an einem ORDER BY beteiligt sind .

In diesem Fall möchten Sie einen Index für type :

SELECT name FROM users WHERE type='admin'

In diesem Fall möchten Sie einen Index für active,type :

SELECT name FROM users WHERE type='admin' AND active=1

In diesem Fall möchten Sie vielleicht einen Index für active,type,name :

SELECT name FROM users WHERE type-='admin' AND active=1 ORDER BY name LIMIT 10

Je mehr Indizes Sie hinzufügen, desto langsamer werden Schreibvorgänge, aber desto schneller werden Lesevorgänge. Dies ist ein klassischer Kompromiss. Bewerten Sie sorgfältig, welche Indizes Sie benötigen, und wenden Sie sie nur an, wenn sie einen greifbaren Nutzen bringen. Zieh sie nicht einfach an, weil du das Gefühl hast, dass sie da sein sollten.

Bei superkleinen Tabellen mit <1000 Zeilen helfen Indizes nicht so viel, da ein Tabellenscan nicht so lange dauert. Bei allem, was nicht trivial ist, sind sie absolut unerlässlich.

Wenn Sie Leistungsprobleme haben, würde ich vorschlagen, dass Ihr Schema das größte Hindernis ist, nicht das Fehlen von Indizes.