2013-03-25 2 views
2

Предположим, что есть таблица с не-столбцов первичного ключа (A, B, C, D), из которых есть индекс (А, В, С, D)Частичные ключевые поиски

Будет запросов вовлекая подмножество (A, B, C, D) использует индекс? Какие особенности существуют с частичным поиском ключей, как описано?

Меня особенно интересует, как это работает в SQL Server, Sqlite, Firebird.

ответ

3

Да, если ключи поиска находятся в том же порядке, что и индексных полей.

В противном случае нет. Скажите, что вам даны инструкции идти в библиотеку, посмотрите в «Великом Гэтсби», глава 3, на третьей странице. Это будет похоже на использование многополюсного индекса.

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

+0

Итак, чтобы поддержать этот сценарий, мне пришлось бы объявлять 4 отдельных индекса каждый на A, B, C, D соответственно? Например. «Получите все книги в главе 3, начиная с« The% »« –

+1

Да. Недостатком является то, что вставка и обновления становятся дороже. –

4

Запросы, которые используют исходное подмножество индекса, должны использовать индекс.

Таким образом, equi-соединения на (A), on (A) и (B) и on (A) и (B) и (C) должны использовать индекс.

На самом деле, вы можете добавить неравенство, а также, так, индекс должен поддерживать все следующие:

  • хА = уА
  • хА = уА и хв> ув
  • хА = уА и хВ = уВы
  • хА = Ya и Xb = уВы и хс> уС
  • хА = уА и хВ = уВы и хс = уС
  • хА = уА и хВ = уВы и хс = уС и х. D> y.D
  • x.A = y.A и x.B = y.B и x.C = y.C и x.D = y.D
+0

что относительно x.C = y.C? Это приведет к полному сканированию таблицы? –

+1

Это должно привести к сканированию индекса, а не к сканированию таблицы. Это быстрее, чем сканирование таблицы, но не так быстро, как индекс ищет похожие сценарии Gordon, перечисленные выше. Дополнительная информация [здесь] (http://stackoverflow.com/questions/1136524/sql-server-plans-difference-between-index-scan-index-seek). –

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