|
|
|
Как расставить индексы в MySQL с различными сортировками?
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Всего записей 20 млн. Выборка по `man_id` вернёт около 3000-4000 тысяч записей Выборка по `man_id` + `man_where` оставит уже 2000-3000 тысячи записей Выборка по `man_id` + `man_where` + `man_group` оставит уже в одном разделе 1990-2990, в другом 10 записей. (то есть по полю `man_group` отсеиваются всего 10 записей). Запросы: Код: sql 1. 2. 3. Без составного индекса по полю сортировки во временной таблице будет сортироваться около 1000-2000 записей. Как верно в данном случае составить индекс/индексы? Я вот думаю: 1) Только лишь составной по `man_id` + `man_where` + `man_group` 2) Сделать 3 составных индекса по полям: `man_id` + `man_where` + `man_group` + `id` `man_id` + `man_where` + `man_group` + `girl_id` `man_id` + `man_where` + `man_group` + `man_saw` 3) Сделать 1 составной и несколько простых с надеждой, что мускул сам объединит индексы и правильно всё сделает: `man_id` + `man_where` + `man_group` `id` `girl_id` `man_saw` ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 17:11:06 |
|
||
|
Как расставить индексы в MySQL с различными сортировками?
|
|||
|---|---|---|---|
|
#18+
inpost3000-4000 тысячЭто сколько? 3-4 миллиона? И куда потерялся первичный ключ в таблице? Я бы попробовал первый и второй второй варианты. Возможно, первый вариант индекса поможет и с сортировкой (если я правильно понял, что первичный ключ - это поле id). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 18:20:19 |
|
||
|
Как расставить индексы в MySQL с различными сортировками?
|
|||
|---|---|---|---|
|
#18+
Извиняюсь за косяк, там имелось ввиду 3000-4000, без тысяч. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 18:26:19 |
|
||
|
Как расставить индексы в MySQL с различными сортировками?
|
|||
|---|---|---|---|
|
#18+
"(если я правильно понял, что первичный ключ - это поле id)." Да, все верно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 18:27:23 |
|
||
|
Как расставить индексы в MySQL с различными сортировками?
|
|||
|---|---|---|---|
|
#18+
inpostИзвиняюсь за косяк, там имелось ввиду 3000-4000, без тысяч.Тогда, возможно, индекс по `man_id` окажется достаточно эффективным, чтобы не создавать остальные индексы. Зависит от требований к быстродействию и доли запросов модификации данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 18:31:35 |
|
||
|
Как расставить индексы в MySQL с различными сортировками?
|
|||
|---|---|---|---|
|
#18+
inpost, у тебя во всех запросах не более 5 тыщ записей под сортировку, это немного, и индексами это оптимизировать не стоит. оптимизируй выборки. потом еще посмотрю на твои запросы.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2015, 09:33:11 |
|
||
|
Как расставить индексы в MySQL с различными сортировками?
|
|||
|---|---|---|---|
|
#18+
Селективность индекса по man_id достаточно высока, чтобы он один обеспечивал оптимальность выполнения. Селективность по остальным полям отбора с учётом отбора по man_id составляет плюс-минус половину, и нет смысла включать в индекс ещё и их. Равно как и поля сортировки. Точно так же не имеет смысла создавать покрывающие индексы - минимальный профит от их использования заведомо сожрётся накладными расхордами на модификацию данных. Сортировка же нескольких тысяч записей, да чисто по одному полю - это операция, оптимизировать которую не имеет смысла, она достаточно быстрая даже по сравнению с получением выводных полей с диска для выдачи. Тем более что она явно предусматривает интерактивную выдачу результата запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2015, 10:23:01 |
|
||
|
Как расставить индексы в MySQL с различными сортировками?
|
|||
|---|---|---|---|
|
#18+
чего-то я не понял. 3-4 тысячи записей в таблице -- тогда вообще никакие индексы не нужны, пока таблица не вырастит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2015, 10:47:00 |
|
||
|
Как расставить индексы в MySQL с различными сортировками?
|
|||
|---|---|---|---|
|
#18+
MasterZivчего-то я не понял. 3-4 тысячи записей в таблице -- тогда вообще никакие индексы не нужны, пока таблица не вырастит.inpostВсего записей 20 млн. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2015, 10:52:47 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38951198&tid=1833245]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
101ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 190ms |
| total: | 346ms |

| 0 / 0 |
