|
|
|
| У меня такой вопрос. Например, есть таблица, при выборки записи из нее в конструкции where участвуют поля A,B,C и запрос группируется по столбцу A.
Отсюда следующий вопрос.
Какой правильный индекс следует создать для более быстрой выборки данных:
KEY(A,B,C) , то есть сразу для нескольких столбцов или по отдельности каждый KEY(A),KEY(B),KEY(C).
И как поведет себя оптимизатор при втором варианте? | |
|
|
|
|
|
|
|
для: admiral
(18.03.2010 в 14:19)
| | Лучше два ключа KEY(A,B,C) и KEY(A) | |
|
|
|
|
|
|
|
для: cheops
(18.03.2010 в 15:19)
| | Если серверу приспичит воспользоваться ключом A , то он его и в наборе ABC отыщет.
Чего не скаажешь о ключах B и C.
Составной ключ ABC для поиска / сортировки / группировки по ключам, не являющимся его левой частью, совершенно бесполезен. К ним относятся простые B, C, и все составные, кроме AB и ABC. | |
|
|
|
|
|
|
|
для: Trianon
(18.03.2010 в 15:49)
| | То есть здесь составной ключ бессмысленно использовать?
Я вот проделал тесты где, если использовать составной индекс, то запрос при 300тыс записей выполнился ~ 0.0029, а при отдельных индексах запрос выполнялся за ~ 0.0009 | |
|
|
|
|
|
|
|
для: admiral
(18.03.2010 в 16:02)
| | Запрос, говорите?
Выполнялся?
Странно... | |
|
|
|
|
|
|
|
для: Trianon
(18.03.2010 в 16:14)
| |
SELECT * FROM tbl WHERE a = 'a' AND b = 'b' AND c = 'c' GROUP BY a
|
1. KEY(A,B,C) ~ 0.0029
2. KEY(A),KEY(B),KEY(C) ~ 0.0009
В чем странность-то? | |
|
|
|
|
|
|
|
для: admiral
(18.03.2010 в 16:30)
| | Теперь странность в SELECT * GROUP BY | |
|
|
|
|
|
|
|
для: admiral
(18.03.2010 в 16:30)
| | Попробуйте
SELECT * ORDER BY a
SELECT * ORDER BY b
SELECT * ORDER BY c | |
|
|
|
|
|
|
|
для: Trianon
(18.03.2010 в 15:49)
| | Че-то я не понял, если KEY(A,B,C), KEY(B,C), KEY(B), KEY(C), KEY(C,A), KEY(C,B), охватывают все возможные варианты сортировок запроса, то все возможные выборки поиска / сортировки / группировки будут выполняться быстро, в отличие от KEY(A,B,C), KEY(A)? | |
|
|
|