2013-08-20 2 views
1

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

Теперь вопрос:

1) Является ли это хорошая идея, чтобы сделать ваш первичный ключ в качестве индекса (предполагается, что первичный ключ является уникальным, идентификатор

2) как бы я знать? какие столбцы индексировать?

ответ

3

1) Primary keys осуществляется с использованием уникального индекса автоматически в Postgres.
The same is true for MySQL.

Все делается здесь.

2) Для консультации по дополнительным показателям, рассмотреть этот тесно связан ответ:
Optimize PostgreSQL read-only tables

Опять же, основы одинаковы для MySQL и Postgres. Однако Postgres имеет более продвинутые функции, такие как partial or functional indices, если они вам понадобятся. Начните с основ.

+0

Что относительно MySql? – user962206

+0

@ user962206: То же самое. [Связанный вопрос здесь.] (Http://stackoverflow.com/questions/1071180/is-the-primary-key-automatically-indexed-in-mysql) –

+0

Я обновил свой вопрос – user962206

0

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

Что касается остальных полей идти, взглянуть на статью здесь на выяснение мощность: http://kirk.webfinish.com/2013/08/some-help-to-find-uniqueness-in-a-large-table-with-many-fields/

поля, которые являются полностью уникальными являются кандидатами, поля, которые не имеют уникальность вообще бесполезны индекс. Сладкое пятно - это мощность в середине (.5).

И, конечно, вы должны посмотреть, какие столбцы вы используете в предложении WHERE. Бесполезно индексировать столбцы, которые не являются частью ваших квази.

0

Первичные ключи будут иметь idex только в том случае, если вы официально определяете их как первичные ключи. Где большинство людей забывают делать индексы, являются ключами Foriegn, которые обычно не индексируются автоматически и почти всегда будут задействованы в объединениях и, таким образом, индексируются. Другие кандидаты на индексы - это то, что вы часто фильтруете на данных, имеющих большое количество возможных значений, таких как имена, номера частей, даты начала и т. Д.

0

1) Это хорошая идея сделать ваш первичный ключ как показатель? (если предположить, что первичный ключ является уникальным, идентификатор

Все DBMSes я знаю автоматически создать индекс под ПК.

в случае MySQL/InnoDB, ПК будет не просто индексируется, но этот индекс будет clustered index.

(кстати, просто говоря, «первичный ключ» подразумевает, что является уникальным, поэтому нет необходимости явно указать «предполагая, что первичный ключ является уникальным».)

2) как бы я знать, какие столбцы индексировать?

Это зависит от того, какие запросы необходимо поддерживать.

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

  • Индекс по FOO бы значительно ускорить в SELECT * FROM T WHERE FOO = ....
  • Однако этот же показатель несколько снизит INSERT INTO T VALUES (...).

В большинстве ситуаций вы предпочитаете большое ускорение в SELECT при малом замедлении в INSERT, но это может быть не всегда так.

Индексирование и производительность базы данных в целом являются сложной темой, выходящей за рамки скромного сообщения StackOverflow, но если вы заинтересованы, я настоятельно рекомендую прочитать Use The Index, Luke!.