Индексиране на много колони от таблица (multicolumn indexes)
Привет, имам една неяснота (а може би и повече) при индексация по много колони в една таблица. Кодът е тук https://pastebin.com/pW2fYKBv (знам, стилът на писане е леко неконсистентен, но ползвах туул за генериране на таблица и множество записи).
Имам близо 13 000 записа в базата и когато изпълня SELECT заявката без никаква индексация ми минава за 0.281 секунди. Като ако я изпълня заедно с EXPLAIN ми показва "rows" че е 13 000, т.е. е минало през всички записи, за да поднесе информацията.
След като създам индекс само по колоната за дата, SELECT-а минава за 0.891 секунди, защото указателите са бавни и търси в паметта всеки запис поотделно. И като изпълня заявката заедно с EXPLAIN пък ми казва че е минало само през 6077 записа, които са реално всички дати, които отговарят на условието (като добавя COUNT(first_name) ми вади 6077 като резултат).
Махам индекса, създавам нов какъвто е в кода (първо по дата и после по име). SELECT-а минава за 0.000 секунди защото цялата му нужна информация е в отделно създадената "non-clustered" таблица, която има вид на балансирано дърво, и няма нужда да рови в паметта да търси на коя дата кое име съответства. Ок, но ако изпълня заявката заедно с EXPLAIN, то тогава ми казва че е минало през 10 936 записа. Почти двойно повече отколкото когато ползвах предния индекс. Не ми става ясно защо се случва това. Явно не схващам какви операции се извършват в дървото, когато е създадено по повече от една колона.