MySQL: что предпочтительнее, отдельные индексы или тот же индекс? - PullRequest
1 голос
/ 18 сентября 2009

Я пытаюсь ускорить SELECT запросов в таблицах MySQL, которые уже имеют некоторые индексы. Надеюсь, без существенного влияния на частые INSERT INTO запросы, выполняемые в то же время (другими клиентами). Таблицы содержат миллионы записей и уже прошли размер в гигабайтах (у них есть поле BLOB).

В таблицах есть пара полей, описывающих непрерывный интервал (может быть интервалом времени в микросекундах, или числом выполнений, или версией, или чем-то еще). Эти два поля проиндексированы; У меня есть два индекса: один только для одного из полей (когда я запрашиваю его), а другой для обоих полей (которые также могут появляться во многих запросах).

Два других индекса-кандидата получены из идентификатора (например, имени файла), поскольку он также часто используется в запросах.

Коллега предлагает включить идентификатор в два предыдущих индекса. Тем не менее, я чувствую, что имеет смысл иметь отдельную клавишу . Я готовлю тест, чтобы выяснить, какой вариант лучше, но я ожидаю, что это займет пару дней. Тем временем я ищу прошлый опыт и / или совет относительно этого.

Итак, мои вопросы:

  1. Что идеально, создать новый индекс для идентификатора? Или включить его в интервальный индекс? То есть многие идентификаторы могут иметь один и тот же интервал, а многие интервалы могут иметь один и тот же идентификатор.
  2. Какой из двух вариантов должен занимать больше дискового пространства, особенно в таблицах с несколькими миллионами строк? Я полагаю, что «более быстрый», какой бы он ни был, будет также самым трудоемким.
  3. Я не знаю, решает ли создание нового индекса (например, опция отдельного индекса) ничего или мало помогает. Каков ваш прошлый опыт в этой или подобных ситуациях? Любой совет / документация, которую я могу исследовать конкретно по этой теме?

1 Ответ

2 голосов
/ 18 сентября 2009

Определение индексов для таблицы зависит от множества факторов. Одним из наиболее важных из них является то, какие запросы именно вы хотите запускать.

В этом случае, не зная структуры таблицы и того, как именно запросы вы хотите включить в работу идентификатора, сложно сказать, как построить индексы.

Имейте в виду, что MySQL имеет один индекс на лимит запросов. Это означает, что оптимизатор запросов будет использовать только один индекс (если он вообще есть) для любой данной таблицы за раз.

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