Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > индексы по умолчанию


Автор: KuMa1104 30.3.2012, 17:54
Здравствуйте подскажите какие индексы MS SQL создает по умолчанию?

Я создал тестовую таблицу в ней 6 колонок 10 милионов строк с значениями
в диапазонах 1-10, 1-100, 1-1000, 1-10000, 1-100000 , 1- 1000000

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

select * from dbo.NumbersSelection
where column6= 10000 


а  если бы я использовал where column1= 5 то тогда количество строк попадавших в выборку будет велико и индекс здесь не нужен 

теперь я запускаю мои запрос засекаю время потом создаю индекс по столбцу column6 запускаю еще раз. Результат не меняется.
Код

select * from dbo.NumbersSelection
where column6= 10000 


Почему так происходит я думал что индекс должен ускорить выполнение в разы ?  
Как правильно измерить время которое которое требуется на выполнение запроса? 

Автор: Zloxa 30.3.2012, 19:13
Я не понял из вашего поста. Вы создали индекс самостоятельно и не увидели эффекта или же вы ждете что MSSQL сам догадается его построить и удивляетесь, что не видите эффекта?

Добавлено через 5 минут и 51 секунду
Цитата(KuMa1104 @  30.3.2012,  18:54 Найти цитируемый пост)
Здравствуйте подскажите какие индексы MS SQL создает по умолчанию?

Для первичных и уникальных ключей - точно.
Могу ошибаться, но, возможно, и для внешних ключей. Но для внешних ключей, наверное, создают индексы case средства. MS вроде допускает наличие fk по не индексированным столбцам.

Автор: KuMa1104 31.3.2012, 21:08
Цитата(Zloxa @  30.3.2012,  19:13 Найти цитируемый пост)
Я не понял из вашего поста. Вы создали индекс самостоятельно и не увидели эффекта или же вы ждете что MSSQL сам догадается его построить и удивляетесь, что не видите эффекта?


Я имел в виду что запускал этот запрос с индексом (который я сам создал) и без него. И в обоих случаях запрос выполнился практически мгновенно, это мне и не понятно, почему без индекса в таблице из 10 миллионов строк запрос выполнился мгновенно, разве полное сканирование таблицы не должно было занять больше времени?

Автор: Zioma 1.4.2012, 10:20
Цитата(KuMa1104 @ 31.3.2012,  20:08)

Я имел в виду что запускал этот запрос с индексом (который я сам создал) и без него. И в обоих случаях запрос выполнился практически мгновенно, это мне и не понятно, почему без индекса в таблице из 10 миллионов строк запрос выполнился мгновенно, разве полное сканирование таблицы не должно было занять больше времени?

Что бы ответить на эти вопросы, необходимо смотреть планы выполнения.
Потому что, даже при наличии индекса при таких "простых" данных движок сервера может посчитать, что использование индекса не оправдано.


Автор: KuMa1104 3.4.2012, 10:37
Понятно, спасибо что прояснили.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)