Стилът ви е много необичаен.
Повечето хора вероятно биха написали WHERE began_at < NOW() AND finished_at > NOW()
Въпреки това. Бих препоръчал да поставите индекс и на двете полета.
Комбиниран ключ няма да ви е от полза, защото ще ускори само търсенето на конкретни комбинации от дати.
Е, това не е напълно вярно, защото ако използвате betree, комбиниран ключ ще ви помогне, но не толкова добре, колкото ако ги индексирате отделно. Комбинираните ключове са много добри, ако търсите комбинации от полета с оператор за равенство (=). Индексите на единично поле се представят по-добре при заявки за ragen.
Можете да потърсите в Google малко за "търсене в многоизмерен диапазон".
Причината е, че всички съвпадащи полета в едно поле могат да бъдат намерени основно в log(n) време в btrees. Така че цялостното ви време на изпълнение ще бъде O(k*log(n)), което е O(log(n)).
Заявките за многоизмерен диапазон имат време на изпълнение от O(sqrt(n)), което е по-високо. Има обаче и по-добри реализации, които също постигат логаритмично време на изпълнение. Те обаче не са напълно внедрени в mysql, така че ще бъде по-лошо или ужасно в зависимост от версията.
Така че нека обобщя:
-
Сравнения на равенство в единични полета:хеш индекс (време на изпълнение O(1))
-
Търсене в диапазон на единични полета:btree индекс на единични полета ( O(log(n)) )
-
Търсене на равенство в множество полета:комбиниран хеш ключ (време на изпълнение O(1))
тези случаи са ясно нещо...
- Търсене в диапазона в множество полета:отделни индекси на btree ( O(log(n)) )
тук не е толкова ясно. с настоящите версии е очевидно по-добре да се индексира отделно поради причините, посочени по-горе. С перфектно изпълнение за този случай на употреба бихте могли да постигнете по-добра производителност с комбинирани ключове, но няма известна система, която го поддържа. имате нужда от това) от версия 5.0, но само много ограничени и оптимизаторът на заявки ги използва само в редки случаи afaik. не знам за по-нови версии като 5.3 или нещо подобно.
обаче с прилагането на mysql на свободни индекси, комбинираните ключове в полета, където извършвате заявки за диапазон или сортиране в различни посоки, стават все по-подходящи.