Должен ли я индексировать мои поля сортировки в MySQL - PullRequest
4 голосов
/ 23 июня 2010

У меня есть поле с именем sort_order, и оно bigint, я использую его в своих запросах mysql для сортировки.

Разумно ли ставить индекс для него?

Ответы [ 4 ]

5 голосов
/ 23 июня 2010

Вообще-то да. Если вы делаете ORDER BY в этом поле, оно, вероятно, должно быть проиндексировано. Конечно, вы сначала захотите проверить его, чтобы убедиться, что он действительно помогает - если вы когда-нибудь выделите небольшое количество строк, это может не иметь большого значения.

4 голосов
/ 23 июня 2010

Честно ли, вы ожидаете получить значение sort_order, которое будет максимально 9,223,372,036,854,775,807 ?! Если исходить из нулевого значения, INT по-прежнему довольно велик и составляет максимум 2 147 483 647 ...

Зависит от ваших запросов, но я бы посмотрел на использование его в индексе покрытия перед отдельным. В MySQL ограничено пространство для индексов , вы, вероятно, достигнете предела, если вы определите индекс для столбца:

Поддержка префиксов и длины префиксов (если они поддерживаются) зависят от механизма хранения. Например, префикс может иметь длину до 1000 байт для таблиц MyISAM и 767 байт для таблиц InnoDB.

2 голосов
/ 23 июня 2010

Как правило, нет.Вы оправдываете индексы поисками.К тому времени, когда вы уменьшите количество записей до числа, которое вы обычно отображаете (скажем, менее нескольких сотен) с индексом, вы ничего не купите.

Поэтому добавляйте индекс, только если вы будете использоватьполе для выбора (которое может включать, скажем, «LIMIT 500», например.)

2 голосов
/ 23 июня 2010

Как уже упоминал Эрик, ответ - Да.

Хотя, если вы на самом деле делаете много вставок и обновлений в таблице, MySQL создает отдельный блок информации для индексации, который должен бытьобновляется каждый раз, когда вносятся изменения в таблицу.Таким образом, накладные расходы могут быть в некоторых случаях.

Так что в основном это смешанный случай, и обстоятельства всегда должны быть рассмотрены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...