sql >> Databasteknik >  >> RDS >> Mysql

MySQL-tabellindexoptimering

Ett index på tidsstämpelkolumnen och användar-id skulle vara till hjälp. Du måste kunna läsa utdata från ett EXPLAIN-uttalande.

Gå till MySQL och gör följande:

EXPLAIN SELECT timestamp, username, [a few more] FROM log 
WHERE timestamp  BETWEEN '2012-03-30 08:00:00' AND '2012-03-30 16:00:00' 
AND username='XX' 

Detta visar dig planen MySQL använder för att köra frågan. Det kommer att finnas en kolumn som heter nyckel. Detta indikerar vilket index MySQL använder i frågan. Jag misstänker att du kommer att se ALLA där vilket betyder att MySQL skannar tabellen från topp till botten och matchar varje rad mot din where-klausul. Skapa nu ett index på kolumnerna tidsstämpel och användarid. Kör EXPLAIN-satsen igen. Du bör se indexet som du skapade i nyckelkolumnen.

Om MySQL använder indexet bör din fråga vara betydligt snabbare. Kom bara ihåg att inte överindexera. Index gör infogning, uppdatering och borttagning långsammare. När du infogar en ny rad i en tabell och det finns tre index på tabellen måste den nya raden skriva 3 värden till de tre olika indexen. Så det är ett tveeggat svärd.




  1. Bästa praxis för en lokal databascache?

  2. MySQL - Hur kan man koppla bort kolumner till rader?

  3. Inaktivera CAST AS för att optimera frågan i Entity Framework

  4. Jag vill konvertera en MySQL-fråga till PDO?