sql >> Databasteknik >  >> RDS >> Mysql

Är det korrekt att indexera alla kolumner i en mysql-databas?

Nej, du indexerar inte alla kolumner. Du indexerar kolumner som är specifikt involverade i en WHERE och ibland om de är inblandade i en ORDER BY .

I det här fallet vill du ha ett index på type :

SELECT name FROM users WHERE type='admin'

I det här fallet vill du ha ett index på active,type :

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

I det här fallet kanske du vill ha ett index på active,type,name :

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

Ju fler index du lägger till desto långsammare blir skrivningarna men desto snabbare blir läsningarna. Detta är en klassisk avvägning. Utvärdera noggrant vilka index du behöver och använd dem endast om det kommer att finnas en påtaglig fördel. Slå inte bara på dem för att du känner att de borde finnas där.

På supersmå tabeller, de med <1000 rader, kommer index inte att hjälpa så mycket eftersom en tabellskanning inte tar så lång tid. På allt som inte är trivialt är de absolut nödvändiga.

Om du har prestandaproblem skulle jag föreslå att ditt schema är det största hindret, inte bristen på index.



  1. Förhindra SQL-injektion i JavaScript / Node.js

  2. Varför är innodbs VISA TABELL STATUS så opålitlig?

  3. Hur SCHEMA_NAME() fungerar i SQL Server

  4. Hur anger man det överordnade frågefältet från en underfråga i MySQL?