3

Я хочу, чтобы оптимизировать этот выберите:Оптимизация выполнения выбора

Select Dane1, Dane5, Dane6, Dane7 FROM Test 
INNER JOIN Test2 ON Test.Id=Test2.IdTest 
WHERE Dane5 > 199850 

Моя база данных имеет 2 таблицы тест, test2:

тест дизайн: Id Int -> первичный ключ, Dane1 Int , Dane2 INT, Dane3 INT, Dane4 INT, Dane5 INT,

test2 дизайн: Id Int -> PRIMARY KEY, Dane6 INT, Dane7 INT, IdTest INT,

индекс по умолчанию: PK__test__7C8480AE (кластерной), PK__test2__7E6CC920 (кластерной)

Вопрос заключается в : Какие индексы для прикрепления или удаления?

+0

также рассказывают о столбцах, которые находятся в ваших кластерных индексах. По умолчанию они будут вашими первичными ключами, но, может быть, у вас нет настроек по умолчанию? Мы ничего не можем сделать из автогенерированных имен кластеров: P – Kritner

+0

Кластерные индексы находятся на первичных ключах: Id в тестовой таблице и Id на таблице test2. –

ответ

3

Там в несколько вещей, которые необходимо учитывать при создании индексов, например, в этом случае:

  • Сколько строк имеет Dane5> 199850 и сколько строк в общей сложности?
  • Есть много обновлений столбцов в индексе -> медленность обновлений.
  • Будут ли много ключевых поисков в базовой таблице, чтобы получить остальные столбцы, необходимые в запросе?

Вы могли бы попробовать что-то вроде этого:

Create index test_xxx on test (Dane5) include (Dane1) 

Погоды включать Dane1 зависит от того, сколько строк есть, и если ключевые поиски вызывают вопросы

Id уже включен, так как это кластерное Индекс

Create index test2_yyy on test2 (IdTest) include (Dane6, Dane7) 

Погода для Dane6 и Date7 в том числе столбцов также зависит от общего количества амуров nt ключевых запросов, которые необходимо выполнить для таблицы, чтобы получить их

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

4

Это всегда хорошая идея, чтобы определить foreign-key relationships. Таким образом, вы сохраняете целостность данных, и вы можете указать, что произойдет, если родительская запись будет удалена (например, рекурсивно удалить дочерние элементы).

Иностранный ключ также является хорошим кандидатом на index, чтобы быстро найти детские записи.

1

Как указал Тим, внешние ключи и индекс, определенные на внешнем ключе, являются хорошим вызовом.

Один дополнительный индекс, который вы могли бы получить некоторую дополнительную скорость - если ваша статья where всегда будет на Dane5 - это добавить некластеризованный индекс на Dane5

+0

Я определил внешние ключи и добавил некластеризованный индекс на Dane5, но оценка subtreecost хуже, чем раньше, до: 4,96352, после: 4,9659 почему? –

+0

хорошо ... «оценивается» во имя метрики - не обязательно воспринимайте это как нечто большее. Индекусы могут быть довольно сложными - они могут помочь некоторым запросам, вредя другим. Я всегда смотрел на них как на искусство, а на науку, хотя определенно участвовала в науке. Просто требует тестирования и настройки. Возможно, это только я: D – Kritner

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