2009-09-04 3 views
0

Несколько дней назад я начал использовать разделение, чтобы можно было работать с большим количеством данных.Должен ли я создать индекс для раздела с фиксированным ключом?

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

ПРОВЕРКА (site_id = «google.com»)

Теперь вот мой вопрос:

При чтении документации я наткнулся на следующее предложение: «Для каждого раздела, создать индекс на ключевой столбец "

Должен ли я сделать это, если ключ будет одинаковым для всего раздела? Будут ли какие-либо преимущества наличия индекса в столбце site_id?

Когда я впервые прочитал его, я решил, что если все строки имеют один и тот же ключ (например, site_id = 'google_com'), то в индексе нет необходимости.


Здесь структура SQL-illustraing БД и типичное использование:

CREATE TABLE сайт ( site_id VARCHAR (50) ПЕРВИЧНЫЙ КЛЮЧ, DESCR текст );

- REQ является главной таблицей
CREATE TABLE REQ ( SITE_ID VARCHAR (50), временной метка временной метки );

- теперь давайте создадим несколько дочерних таблиц

INSERT INTO сайт (Site_ID) VALUES ('GOOGLE_COM'); CREATE TABLE req_google_com ( CHECK (site_id = 'google_com') ) INHERITS (req);

INSERT INTO site (site_id) VALUES ('twitter_com'); CREATE TABLE req_twitter_com ( CHECK (site_id = 'twitter_com') ) INHERITS (req);

- и теперь пишут некоторые запросы:
INSERT INTO req_google_com VALUES ('GOOGLE_COM', теперь()), ('GOOGLE_COM', теперь());

ответ

0

Да, если все данные в таблице имеют одинаковое значение столбца, вам не нужен индекс. На самом деле вам совсем не нужен столбец.

Если у вас есть индекс, и он используется (например, в результате предложения WHERE), это может фактически замедлить работу. Прохождение индекса для фильтрации строк является только benificial, когда вы в конечном итоге выбрали небольшое подмножество всей таблицы (некоторые говорят, что не более 10 процентов). Доступ к индексу, а затем завершение каждой отдельной строки - это пустая трата энергии.

При чтении документации я пришел по следующему предложению: «Для каждого раздела, создать индекс столбца ключа (ов)»

Вы уверены, что документация говорит о ключ раздела? Не глобальный первичный ключ?

+0

Я только что отредактировал оригинальное сообщение, чтобы показать структуру БД. Я не могу избавиться от столбца site_id. Хотя значение site_id всегда одинаково для данного фрагмента, оно отличается для другого и будет использоваться в предложении WHERE для доступа к данным прозрачным способом (путем выбора из таблицы master req). – Prikrutil

+0

Я прочитал его как «Для каждого раздела создайте индекс в столбце site_id». Извините, я не понимаю разницы между «глобальным первичным ключом» и «ключ раздела», – Prikrutil

Смежные вопросы