Ограничения для индексирования в MySQL - PullRequest
1 голос
/ 14 июля 2010

Здравствуйте, я бы проиндексировал таблицы базы данных. Существующие ограничения, которым я следую, - это индексация столбцов, которые наиболее часто используются в предложениях «где» в моих запросах Это было бы правильным ограничением или есть какие-то другие ограничения или проверки, которым нужно следовать ?? И как индексирование повлияет на базу данных в целом?

Ответы [ 3 ]

2 голосов
/ 14 июля 2010

Вы вправе использовать индексы для полей, которые часто используются в предложениях WHERE. Несколько других мест для их использования:

  1. Поля внешнего ключа (которые вы используете для объединений).
  2. Поля, которые вы используете для ORDER BY.
  3. Поля, которые вы используете для GROUP BY.

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

0 голосов
/ 14 июля 2010

Две причины для индексации: производительность запросов / DML и принудительные ограничения.

Для первой:

Индексы должны поддерживаться ... новые записи должны быть вставлены, изменения перемещеныудалено удаленоДля каждого DML для таблицы есть также один на индекс.Таблица с 8 индексами означает, что в DML выполняется в 8 раз больше (примерно).

В данных индекса "есть куда идти".2 должно находиться в диапазоне от 1 до 3. Если для этого нового значения места нет, то есть разделение блоков (читай: накладные расходы).

Не следует индексировать каждый столбец, который может быть в предложении where.Столбцы с низкой кардинальностью или диапазон сканирования по сильно разбросанным данным обычно не используют индекс.Большую часть времени RDBMS может использовать только один индекс за раз на таблицу.(В некоторых случаях индексы могут быть соединены друг с другом).Поэтому некоторые индексы должны быть в нескольких столбцах.

COMMENT RESPONSE:

Сначала, если у вас есть предложение where с столбцами A и columnB в нем.И у вас есть два индекса, один на colA, а другой на colB ... вполне вероятно, что оптимизатор выберет один или другой, основываясь на селективности предиката и самого индекса.Другой предикат будет просто фильтровать результаты сканирования индекса и полученного доступа к таблице.Вы будете пахать через гораздо больше блоков таблиц, чем необходимо ... и если ни один из индексов не будет достаточно избирательным, вы все равно получите FTS.

Но если вам часто нужны colA и colB в выражениях whereВместе вы можете построить индекс по обоим столбцам одновременно.Теперь оба предиката будут использоваться для ограничения доступа к результирующему блоку таблицы только теми, которые содержат нужную строку.

Теперь начальный столбец становится важным.

0 голосов
/ 14 июля 2010

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

Что касается того, как индексирование влияет на базу данных в целом, индексы используются в первую очередь для обеспечения целостности данных и производительности. Индексы могут вызывать проблемы при загрузке большого количества данных (то есть с помощью массовой загрузки или другими способами), поскольку при каждой загрузке записи индексы должны обновляться. Есть способы отключить это, что часто делается, когда загружаются большие объемы данных, но компромисс заключается в том, что вы должны убедиться, что данные верны, потому что если это не так, и вы пытаетесь повторно включить По индексам операция не удастся.

Относительно того, влияет ли добавление дополнительных индексов на производительность, это зависит от того, сколько индексов у вас уже есть. Чем больше у вас индексов, тем больше работы оптимизатор должен решить, какой индекс использовать. А также, это зависит от размера таблицы, количества столбцов и т. Д.

Одна вещь, которую я настоятельно рекомендую при определении влияния индекса, - это посмотреть на план запроса, чтобы определить, какой индекс используется. Если вы пытаетесь ускорить выполнение заданного запроса, это скажет вам, помог ли индекс.

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