FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Flitig postare
|
Jag gör en del SELECT-frågor där resultatet skall innehålla rader där en viss kolumn är lika med ett visst datum.
Exempel: SELECT * FROM T WHERE MYDATE = CURRENT_DATE MYDATE är ett datum-fält (innehåller ej tid) och har ett "normalt" index. Tabellen är av typen myisam. Jag upplever att denna fråga, trots att den matchar på ett värde exakt och trots att datum-kolumnen har ett index, tar väldigt lång tid att exekvera. Min tabell har miljontals rader. Men det är endast 15000 - 20000 rader som matchar ett visst datum. Problemet är som sagt att den här frågan kan ta ganska lång tid att exekvera. Går det att få den att exekvera snabbare på något sätt? Jag har läst i manualen om BTREE men vet inte riktigt om den typ av index går att tillämpa på datum. Då och då sorterar jag på datum i andra frågor och enligt manualen fungerar inte det om man har ett BTREE index. Men det kanske går att ha både ett normalt och ett BTREE index samtidigt, utan problem? |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Administratör
|
Ett BTREE index är nog vad du har om du inte vet vad du har för index. Undantaget jag vet om med MySQL är om du använder innodb och har klustrade index.
Det låter som om du kan ha nytta av att öka på key buffer size, förutsatt att du använder myisam. Annars kan det också vara så att själva datahämtningen tar väldig tid om du har en väldigt fragmenterad tabell. Testa att köra en optimize på tabellen.
__________________
eldefors.com - Personlig (teknik)-blogg |
||
![]() |
![]() |
![]() |
#3 | |||
|
||||
Mycket flitig postare
|
Har inte gjort några tester själv men det ska tydligen vara bra mycket snabbare att använda int istället för datum, iaf i SQL Server. Det kanske kan vara värt att undersöka om detsamma gäller i MySQL.
|
|||
![]() |
![]() |
Svara |
|
|