Являются ли эти SQL-индексы необходимыми или избыточными: только по A и по A+B?

Я хочу создать индексы SQL, чтобы ускорить, например, поиск "значений ряда" в базе данных. Каждый Value принадлежит Series и имеет дату:

@Entity
class Series { … }

Value {
   Series series;
   Date date;
   …
   }

Существуют сотни рядов, каждый из которых содержит многие тысячи значений.

Я часто выполняю два типа поиска:

1) Поиск всех значений, принадлежащих определенной серии (независимо от их дат).

2) Поиск всех значений, принадлежащих определенной серии и находящихся в пределах определенного интервала дат.

Я могу создать два индекса SQL, один только для столбца series, а другой — для столбцов series и date. Используя Hibernate, это будет:

@Table (indexes = {
        @Index (name = "idx1", columnList = "series"),
        @Index (name = "idx2", columnList = "series, date")
        })

У меня вопрос: быстрее ли выполняется поиск, если я создаю оба этих индекса, или это то же самое, если я создаю только один такой индекс:

@Table (indexes = {
        @Index (name = "idx", columnList = "series, date")
        })

person MarcG    schedule 26.06.2017    source источник
comment
Какую версию SQL вы используете?   -  person Raunak Thomas    schedule 26.06.2017


Ответы (2)


Два индекса избыточны, потому что второй содержит те же ключи, что и первый, в том же порядке (плюс дополнительный ключ).

В общем, это плохая идея, потому что это ненужная избыточность (такой каламбур ;) Так что просто индекс с двумя ключами.

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

person Gordon Linoff    schedule 26.06.2017

Вам нужен только один индекс с обоими столбцами.

person Joel Coehoorn    schedule 26.06.2017