составной индекс базы данных по умолчанию? - PullRequest
1 голос
/ 17 декабря 2011

, когда я создаю индекс для db2, например, со следующим кодом:

CREATE INDEX T_IDX ON T(
A,
B)

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

CREATE INDEX T1_IDX ON T(A)
CREATE INDEX T2_IDX ON T(A)

РЕДАКТИРОВАТЬ: эта дискуссия идет не в том направлении, которое я ожидаю (но в лучшем :)) Я действительно спросил, как, а не почему создавать отдельные индексы, я планировал сделать это в другом вопросе, но так как вы ожидал меня:

предположим, у меня есть таблица T (A, B, C) и функция поиска search (), которые выбирают из таблицы любым из следующих способов

WHERE A = x
WHERE B = x
WHERE C = x
WHERE A = x AND B=y (and so on AC, CB, ABC)

если я создаю составной индекс ABC, будет ли он работать, например, когда я выбираю только C? таблица довольно большая, и вставка \ обновление не так часто

Ответы [ 3 ]

2 голосов
/ 17 декабря 2011

Да несколько полей при создании индекса = составной по определению: укажите два или более имен столбцов для создания составного индекса.

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

Если все столбцы, выбранные запросом, находятся в составном индексе, тогда dbengine может вернуть эти значения из индекса, не обращаясь к таблице. так что у вас есть более быстрое время поиска.

Однако, если один или другой используется в запросах, то создание отдельных индексов будет вам лучше всего. Это зависит от типов выполняемых запросов и от того, какие значения они содержат / filter / join.

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

0 голосов
/ 17 декабря 2011

Индекс на A, B является составным индексом и может использоваться для поиска только по A или поиска по A с помощью B или, конечно, для общего сканирования.

Обычно нет смысла иметь индекс для A, B и индекс только для A, поскольку частичный поиск по A, B можно использовать, если у вас есть только A. Этот более широкий индекс будет немного однако менее эффективный, поэтому, если поиск A встречается очень часто и требования записи означают, что допустимо обновить дополнительный индекс, это может быть оправдано.

Может потребоваться наличие индекса на B, поскольку индекс A, B не очень подходит для поиска только на основе B.

0 голосов
/ 17 декабря 2011

Первый ответ: ДА

CREATE INDEX JOB_BY_DPT
      ON EMPLOYEE (WORKDEPT, JOB)

Второй ответ:

Это зависит от вашего запроса;если в большинстве случаев ваш запрос ссылается на один столбец в выражении where, например select * from T where A = 'something', тогда вам нужен только один индекс, но если ссылки на столбцы A и B ссылаются, вам следует создать составной.1008 * Для дальнейшей ссылки, пожалуйста, проверьте

http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r0000919.htm

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