Время создания индекса в MySql - PullRequest
0 голосов
/ 08 февраля 2011

Я проектирую базу данных в Mysql, которая будет заполнена довольно большими объемами необработанных данных. Я хочу знать, что я должен определить индексы, прежде чем вставлять данные, или я должен сначала вставить свои данные, а затем создать индекс? есть ли разница? Также я хочу знать, если у меня есть индекс на 2 столбца, лучше ли индексировать их отдельно или вместе? Спасибо

Ответы [ 4 ]

2 голосов
/ 08 февраля 2011

Также я хочу знать, хочу ли я иметь индекс по 2 столбцам, лучше ли индексировать их отдельно или вместе?

Это зависит от ваших запросов. Если у вас есть индекс (colA, colB), база данных никогда не сможет использовать этот индекс, если вы не используете colA в условии WHERE своих запросов. Если у вас есть запросы WHERE colB = ?, вам нужен индекс, начинающийся с этого столбца.

index (colA, colB);
WHERE colA = ?; -- can use the index
WHERE colA = ? AND colB = ?; -- can use the index

Это не удастся:

WHERE colB = ?;

Но ... если вы измените порядок столбцов в индексе:

index (colB, colA); -- different order
WHERE colb = ?; -- can use the index
WHERE colA = ? AND colB = ?; -- can use the index

А теперь этот не может использовать индекс:

WHERE colA = ?;

Проверьте ваши запросы, используйте EXPLAIN и создайте только те индексы, которые вам действительно нужны.

2 голосов
/ 08 февраля 2011

Если вы выполняете массовую загрузку, я считаю, что индексы не должны быть загружены заранее, что замедлит загрузку для постоянной записи страниц индекса, особенно при большом наборе данных. При этом после заполнения таблиц сделайте SINGLE, чтобы построить ВСЕ ожидаемые индексы, а не один за другим. Я научился трудному пути давным-давно. У меня была таблица из 14 с лишним миллионов строк, и мне нужно было построить более 15 индексов. Каждый индекс был все длиннее, чем предыдущий. Появлялся каждый раз новый индекс, нужно было перестраивать страницы за предыдущий. Делать их все сразу оказалось значительно лучше.

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

1 голос
/ 08 февраля 2011

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

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

1 голос
/ 08 февраля 2011

Сначала вставьте данные.

Если индекс по двум столбцам, будь то комбинированный поиск или отдельный, будет (при нормальном круге):

idx_a (fldA + fldB) idx_b (fldB)

С уважением, // т

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