комбинация первичного ключа VS.вторичный ключ в MySQL - PullRequest
4 голосов
/ 30 ноября 2011

У меня есть таблица с двумя конкретными столбцами, один из которых - число с автоинкрементом, другой - пользовательский номер.Эти два столбца будут часто выбираться вместе в условии where.Теперь у меня есть 2 варианта с движком InnoDB:

  1. Использование числа с автоинкрементом в качестве первичного ключа при создании индекса для столбца пользовательских номеров.этот выбор будет сделан очень быстро при вставке, потому что новая запись будет вставлена ​​одна за другой, хотя это приведет к некоторому слиянию или разделению кластерного индекса.Но для построения индекса по столбцу пользовательских номеров потребуется дополнительное время и пространство.

  2. Я могу использовать автоматически увеличенный номер и столбец пользовательских номеров вместе в качестве первичного ключа.При вставке запись не будет размещаться одна за другой, поэтому она будет вызывать частое разделение и объединение первичного индекса B-дерева.

Оба эти варианта ускорят запрос, использующий автоматический-инкрементированный номер и пользовательский номер столбца в качестве условия фильтра.Но если мы рассмотрим вставку и пробел, какой из них предпочтительнее?

Большое спасибо!

1 Ответ

3 голосов
/ 30 ноября 2011

Составной первичный ключ в этом случае выглядит лучше, поскольку ключ становится индексом покрытия. И почему вы думаете, что это потребует расколов? Поле автоинкремента должно быть первым в составном первичном ключе в InnoDB, то есть все новые строки будут добавлены в конец.

И автоинкрементное поле в InnoDB уникально по всей таблице даже в составном первичном ключе, в отличие от того, что в MyIsam, где оно перезапускается для каждой новой оставшейся части первичного ключа.

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