Правила индексации таблицы ограниченного использования - MySQL

0

У меня есть таблица с 8 столбцами со смешанными типами данных (int, text, varchar и т.д.)

В этой таблице только один запрос, который работает на нем (SELECT), и внутри этого запроса он использует 4 "AND" для фильтрации результатов.

Мой вопрос: каковы некоторые рекомендации по индексированию в этой ситуации?

В моем случае время чтения имеет более высокий приоритет, чем время записи, поэтому я должен индексировать все столбцы, которые появляются в предложении AND? Должен ли я индексировать только целые числа?

Теги:
indexing

3 ответа

2
Лучший ответ

Для одного запроса создайте индекс со всеми затронутыми столбцами.

Индексы MySQL работают слева направо, что означает, что если у вас есть таблица со столбцами:

A varchar(255)
B varchar(50)
C int(11)
D datetime

Индекс на KEY index (A,B,C,D) означает, что MySQL будет искать столбцы в вашем запросе слева направо. Если вы включите их все в свой запрос, они будут использовать их все, но если вы включите только A и B, они будут использовать их для фильтрации результатов, прежде чем применять остальные условия к оставшемуся набору результатов (при условии, что вы используете AND).

Однако, если вы включаете только C и D, он не будет использовать этот индекс вообще, так как он не знает, что искать в A.

2

Если вы быстро посмотрите как MySQL использует свои индексы, вы должны иметь возможность выработать лучшие столбцы для индексации.

0

Я думаю, вы должны создать индекс для каждого столбца, который вам нужен для ваших операторов select. Обратите внимание, что в mysql существует ограничение в длине поля, вы создаете индекс. Созданный индекс не может превышать 1000 байтов для MyISAM и 767 для InnoDb (спасибо OMG Ponies). Здесь вы можете найти обсуждение об оценке размера индекса для столбца varchars. Если у вас нет записей, это должно значительно повысить производительность операторов select.

  • 0
    Существует ограничение на пространство для создания индексов, но это зависит от движка - MyISAM 1000, InnoDB 767 ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню