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

У меня есть таблица с 8 столбцами со смешанными типами данных (int, text, varchar и т. Д.)использует 4 оператора «И» для фильтрации результатов.

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

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

Ответы [ 3 ]

2 голосов
/ 19 января 2011

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

2 голосов
/ 19 января 2011

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

Индексы 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.

0 голосов
/ 19 января 2011

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

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