Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 MS Sql Server, индексы для таблиц и их ипользование  [new]
guestfreeman
Member

Откуда:
Сообщений: 104
Доброе время суток. Самообучаюсь по SQL'ю. Изучаю индексы. Мне непонятно, например, я создал индекс для определенной таблицы, как в ходе выполнения запросов к данной таблице оптимизатор запросов (Query Optimizer) "поймет" что этот индекс нужно использовать?
23 янв 16, 11:27    [18719647]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
guestfreeman,

Он посмотрит статистику, входные параметры, условия соединения таблиц в запросе. И если плсчитает полезным индекс, то использует его
23 янв 16, 12:13    [18719716]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
guestfreeman
Доброе время суток. Самообучаюсь по SQL'ю. Изучаю индексы. Мне непонятно, например, я создал индекс для определенной таблицы, как в ходе выполнения запросов к данной таблице оптимизатор запросов (Query Optimizer) "поймет" что этот индекс нужно использовать?



ответ очень прост. Ментальным усилием.

т. о. тебе для этого ничего делать не надо.
24 янв 16, 09:25    [18722105]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1981
guestfreeman,

Советую создавать индексы не наобум, а на основе анализа выполняемого кода.
Т.е. выделяем нужный кусок кода, нажимаем кнопочку "Display Estimated Execution Plan" и получаем ожидаемый план выполнения. Внутри него смотрим, какие индексы система рекомендует создать - и создаём. Сам код при этом не выполняется.

Если Вы не разработчик, а админ - то Вам больше подойдёт анализ статистики "пропущенных индексов", которые надо создать, и анализ статистики существующих индексов - какие из них редко используются и можно удалить.
На форуме соответствующие скрипты в наличии, ищите по ключевым словам dm_db_missing_index_group_stats, dm_db_missing_index_groups, dm_db_index_usage_stats).
25 янв 16, 13:57    [18725665]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
o-o
Guest
DaniilSeryi
guestfreeman,

Советую создавать индексы не наобум, а на основе анализа выполняемого кода.
Т.е. выделяем нужный кусок кода, нажимаем кнопочку "Display Estimated Execution Plan" и получаем ожидаемый план выполнения.
Внутри него смотрим, какие индексы система рекомендует создать - и создаём. Сам код при этом не выполняется.

Если Вы не разработчик, а админ - то Вам больше подойдёт анализ статистики "пропущенных индексов", которые надо создать,
и анализ статистики существующих индексов - какие из них редко используются и можно удалить.
На форуме соответствующие скрипты в наличии, ищите по ключевым словам dm_db_missing_index_group_stats, dm_db_missing_index_groups, dm_db_index_usage_stats).

вы хоть думайте, кому советуете.
если ему на каждый запрос будут советовать покрывающий индекс сделать,
и он правда их все насоздает,
у него ж база крякнет.
--------------
а отличный совет об удалении индексов за неиспользованием?
ничего, что они могут unique constraint реализовывать?
--------------
как можно советотать что-то кому-то, кто вообще ни в зуб ногой?
25 янв 16, 14:18    [18725846]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
o-o
DaniilSeryi
guestfreeman,

Советую создавать индексы не наобум, а на основе анализа выполняемого кода.
Т.е. выделяем нужный кусок кода, нажимаем кнопочку "Display Estimated Execution Plan" и получаем ожидаемый план выполнения.
Внутри него смотрим, какие индексы система рекомендует создать - и создаём. Сам код при этом не выполняется.

Если Вы не разработчик, а админ - то Вам больше подойдёт анализ статистики "пропущенных индексов", которые надо создать,
и анализ статистики существующих индексов - какие из них редко используются и можно удалить.
На форуме соответствующие скрипты в наличии, ищите по ключевым словам dm_db_missing_index_group_stats, dm_db_missing_index_groups, dm_db_index_usage_stats).

вы хоть думайте, кому советуете.
если ему на каждый запрос будут советовать покрывающий индекс сделать,
и он правда их все насоздает,
у него ж база крякнет.
--------------
а отличный совет об удалении индексов за неиспользованием?
ничего, что они могут unique constraint реализовывать?
--------------
как можно советотать что-то кому-то, кто вообще ни в зуб ногой?


Бывало у меня пару раз. Анализировал БД, а там таких индексов насоветованных адвайзерами куча. Чувак решал свою конкретную задачу, посмотрел план, создал индекс, вообще не понимая, что эта за таблица, какие тут операции, какие последствия.

А потом говорит, отвалите от меня -- я свою работу сделал, у меня все работает. У вас все легло -- это ваше проблема. Это не мой участок кода. Чего вы от меня хотите? Знать ничего не хочу.
25 янв 16, 14:35    [18725982]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4999
Да, эти подсказчики и запросы по системным вьюхам не всегда выдают полезную информацию по отсутствующим индексам.
Иногда(редко правда) данный индекс уже есть, иногда индекс не актуален.
А один раз(за 3 года) из-за создания предлагаемого индекса встал импорт в целевую таблицу. :)
Но в 98% случаев информация там полезна.
25 янв 16, 18:14    [18727399]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
komrad
Member

Откуда:
Сообщений: 5764
o-o
если ему на каждый запрос будут советовать покрывающий индекс сделать,

да, покрывающие индексы - это сила!
25 янв 16, 19:00    [18727643]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
virtuOS
Member

Откуда: большая деревня
Сообщений: 266
Megabyte
Иногда(редко правда) данный индекс уже есть, иногда индекс не актуален.

Видел подобное несколько раз на пользовательских базах. Правильно ли я понимаю, что причиной является высокая фрагментация и решением проблемы будет ребилд индекса?
26 янв 16, 10:14    [18729095]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4999
virtuOS
Megabyte
Иногда(редко правда) данный индекс уже есть, иногда индекс не актуален.

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

У меня нет точного ответа. Есть только подозрение, что это какой-то косяк анализатора сервера.

В моем одном случае проблема точно не с высокой дефрагментацией. Только что создал индекс, но запрос по отсутствующим индексам все равно отображал его, как отсутствующий. Причем индекс очень дорогой.
26 янв 16, 12:44    [18729858]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
o-o
Guest
Megabyte
Только что создал индекс, но запрос по отсутствующим индексам все равно отображал его, как отсутствующий. Причем индекс очень дорогой.

а можно репро в студию?
скрипт индекса + план, где предлагается точно такой же индекс
26 янв 16, 12:48    [18729884]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4999
o-o
Megabyte
Только что создал индекс, но запрос по отсутствующим индексам все равно отображал его, как отсутствующий. Причем индекс очень дорогой.

а можно репро в студию?
скрипт индекса + план, где предлагается точно такой же индекс

Это не в плане, это по запросу:
SELECT TOP 50  
 [Total Cost] = ROUND(s.avg_total_user_cost * s.avg_user_impact * (s.user_seeks + s.user_scans),0), 
 s.avg_user_impact, 
 TableName = d.statement, 
 [EqualityUsage] = d.equality_columns, 
 [InequalityUsage] = d.inequality_columns, 
 [Include Cloumns] = d.included_columns 
 FROM sys.dm_db_missing_index_groups g  
 INNER JOIN sys.dm_db_missing_index_group_stats s ON s.group_handle = g.index_group_handle  
 INNER JOIN sys.dm_db_missing_index_details d ON d.index_handle = g.index_handle 
 WHERE database_id = DB_ID() AND [statement] like '%%' 
 ORDER BY [Total Cost] DESC


Я, правда, досконально не исследовал все запросы, где мог бы применяться данный индекс\таблица, т.к. таблица базовая, применяется много где.
26 янв 16, 13:17    [18730050]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
o-o
Guest
Megabyte
Это не в плане, это по запросу:

ну так и план у запроса.
выкладывайте план.
в нем есть тот самый MissingIndex.
и выкладывайте имеющийся индекс
26 янв 16, 13:48    [18730276]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
guestfreeman,

Самое главное условие которым руководствуется оптимизатор, это выгода. Для взвешивания выгод от использования/не использования того или иного индекса оптимизатор использует условную величину, называемую - стоимость и основанную на оценках предполагаемых затрат сервера на выполнение в некоторых условных единицах, которые моделируют нагрузку на диск и процессор и зависят от числа предполагаемых строк.

Если под использованием предполагает поиск по индексу, до добавляется еще одно условия - принципиальная возможность такого поиска. Так, если телефонный справочник (аналог "индекса") упорядочен сначала по фамилиям, нельзя выполнить точечный поиск зная только имя.

Если вы только изучаете sql, то начните с понимания того, что такое индекс, как он устроен и как может использоваться. Далее придет понимание для каких запросов, какие индексы и как могут или не могут использоваться. Эти базовые основы есть практически в любой книге по SQL Server, а базовые принципы актуальны даже для книг 15 летней давности, так что выбор большой. Если читаете на английском могу порекомендовать книги автора Itzik Ben-Gan, там довольно доходчиво.

Megabyte
У меня нет точного ответа. Есть только подозрение, что это какой-то косяк анализатора сервера.

Есть такой баг, когда в плане запроса предлагается создать такой индекс, даже если он уже есть:
http://www.sqlskills.com/blogs/paul/missing-index-dmvs-bug-that-could-cost-your-sanity/

И несмотря на то, что в статье написано: "This is a little-known bug (Connect item #416197) which is fixed in SQL11 but won't be fixed in earlier versions." - в самом коннект айтеме написано: "We are tracking to address this issue in the our upcoming release (code-named SQL 11).", и видимо, то ли не довели до конца, то ли регрессия, но репро приведенное в статье работает и для SQL Server 2014 (12.0.2495.0).
26 янв 16, 14:29    [18730601]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
guestfreeman
Member

Откуда:
Сообщений: 104
Спасибо всем за информацию, большинство для меня полезно.

PS: o-o особенно понравилась ваша фраза:

o-o
вы хоть смотрите что кому советуете .

- Знаете, есть хорошие поговорки: "Учиться никогда не поздно", и "Стыдно не учиться, стыдно не знать". И просто к сведению: если я что-то спрашиваю, это не значит, что дальше я слепо следую всем инструкциям\советам на рабочих машинах (серверах).
26 янв 16, 17:57    [18731991]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4999
o-o
Megabyte
Это не в плане, это по запросу:

ну так и план у запроса.
выкладывайте план.
в нем есть тот самый MissingIndex.
и выкладывайте имеющийся индекс

Результат запроса:
Total Cost | avg_user_impact | TableName | EqualityUsage | InequalityUsage | Include Cloumns
23180949 | 91,21 | [CallCenter_new].[dbo].[HoldCall] | [TimeEnd] | [TimeBegin] | NULL

Скрипт индекса:
CREATE NONCLUSTERED INDEX [IX_HoldCall_TimeEnd_TimeBegin] ON [dbo].[HoldCall] 
(
	[TimeEnd] ASC,
	[TimeBegin] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO


SomewhereSomehow
Megabyte
У меня нет точного ответа. Есть только подозрение, что это какой-то косяк анализатора сервера.

Есть такой баг, когда в плане запроса предлагается создать такой индекс, даже если он уже есть:
http://www.sqlskills.com/blogs/paul/missing-index-dmvs-bug-that-could-cost-your-sanity/

И несмотря на то, что в статье написано: "This is a little-known bug (Connect item #416197) which is fixed in SQL11 but won't be fixed in earlier versions." - в самом коннект айтеме написано: "We are tracking to address this issue in the our upcoming release (code-named SQL 11).", и видимо, то ли не довели до конца, то ли регрессия, но репро приведенное в статье работает и для SQL Server 2014 (12.0.2495.0).

Спасибо за инфу. У нас Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
26 янв 16, 18:10    [18732055]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
o-o
Guest
guestfreeman,
учиться тоже надо уметь.
вам про книги когда было сказано? 18722862
вам только что постом выше это повторили и конкретного достойного автора присоветовали.
да за полгода регистрации на форуме, открывши книгу, вполне себе можно было освоить SELECT с его ORDER BY.
но это надо приложить усилия.
куда проще в рупор орать: я учусь!!! индивидуальная программа, автор... скромный я!
ну кому еще как не мне знать, что и в каком порядке изучать!!! (какой-то еще Бен..Ган...придумали тоже, правда?)

результат "самообразования", кстати, налицо
26 янв 16, 18:11    [18732061]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
komrad
o-o
если ему на каждый запрос будут советовать покрывающий индекс сделать,

да, покрывающие индексы - это сила!


Ага, необузданная сила в деле убиения БД...
26 янв 16, 18:12    [18732068]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
o-o
Guest
Megabyte,
жалко, что нет запроса, на к-ом он "не видит" нужный имеющийся индекс.
но спасибо за идею.
у нас тоже 2008 R2, понаблюдаю
26 янв 16, 18:27    [18732180]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
o-o
Megabyte
Только что создал индекс, но запрос по отсутствующим индексам все равно отображал его, как отсутствующий. Причем индекс очень дорогой.

а можно репро в студию?
скрипт индекса + план, где предлагается точно такой же индекс
Был похожий прикол. Некластерный индекс уже был создан, а оптимизатор предложил создать еще точно такой же. При детальном рассмотрении оказалось что таблица была секционирована и индекс тоже, соответственно использоваться запросом в таком виде он не мог.
26 янв 16, 20:42    [18732773]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4999
o-o
Megabyte,
жалко, что нет запроса, на к-ом он "не видит" нужный имеющийся индекс.
но спасибо за идею.
у нас тоже 2008 R2, понаблюдаю

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

Mind
o-o
пропущено...

а можно репро в студию?
скрипт индекса + план, где предлагается точно такой же индекс
Был похожий прикол. Некластерный индекс уже был создан, а оптимизатор предложил создать еще точно такой же. При детальном рассмотрении оказалось что таблица была секционирована и индекс тоже, соответственно использоваться запросом в таком виде он не мог.

Я думал, что может быть запрос, по какой-то причине(например, жестко хинтом указали другой индекс), не может пользоваться индексом, поэтому тот "висит" в отсутствующих. Секционирование у нас не применяется.
26 янв 16, 20:51    [18732798]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
guestfreeman
Member

Откуда:
Сообщений: 104
o-o
guestfreeman,
учиться тоже надо уметь.
вам про книги когда было сказано? 18722862
вам только что постом выше это повторили и конкретного достойного автора присоветовали.
да за полгода регистрации на форуме, открывши книгу, вполне себе можно было освоить SELECT с его ORDER BY.
но это надо приложить усилия.
куда проще в рупор орать: я учусь!!! индивидуальная программа, автор... скромный я!
ну кому еще как не мне знать, что и в каком порядке изучать!!! (какой-то еще Бен..Ган...придумали тоже, правда?)

результат "самообразования", кстати, налицо

Я по книге и учусь: Thomas O. - Training Kit Exam 70-462 Administering Microsoft SQL Server 2012 Databases - 2012
И знаете что, o-o, у меня неплохой опыт по администрированию серверных ОС Windows, и громадный опыт по администрированию решений 1С. И когда (на другом форуме) кто-то задает вопросы, которые кажутся мне неграмотными, я никогда не ножу. Это так, пища для размышлений.
27 янв 16, 08:05    [18733858]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
o-o
Guest
несказанно за вас радуюсь,
единственное, что меня смущает, как такой грамотный товарищ не в состоянии *самостоятельно* найти синтаксис order by в гугле.
и еще непонятно, как можно изучать индексы, не зная слов ascending, descending.
но бог с вами, мне кажется просто, когда в книге столько неясного, что *элементарщину* приходится спрашивать на форуме, в самый раз данную книгу отложить на время и начать с чего полегче.
без базовых понятий далеко не уедешь.
их не по ходу дела надо пополнять, базу заложить надо
27 янв 16, 08:21    [18733870]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1981
guestfreeman
o-o
guestfreeman,
учиться тоже надо уметь.
вам про книги когда было сказано? 18722862
вам только что постом выше это повторили и конкретного достойного автора присоветовали.
да за полгода регистрации на форуме, открывши книгу, вполне себе можно было освоить SELECT с его ORDER BY.
но это надо приложить усилия.
куда проще в рупор орать: я учусь!!! индивидуальная программа, автор... скромный я!
ну кому еще как не мне знать, что и в каком порядке изучать!!! (какой-то еще Бен..Ган...придумали тоже, правда?)

результат "самообразования", кстати, налицо

Я по книге и учусь: Thomas O. - Training Kit Exam 70-462 Administering Microsoft SQL Server 2012 Databases - 2012
И знаете что, o-o, у меня неплохой опыт по администрированию серверных ОС Windows, и громадный опыт по администрированию решений 1С. И когда (на другом форуме) кто-то задает вопросы, которые кажутся мне неграмотными, я никогда не ножу. Это так, пища для размышлений.


Прежде чем с Training Kit начинать работать, не помешало бы курсы пройти, чтобы основы получить.
Бегом регистрироваться на [url=]https://mva.microsoft.com/[/url]
27 янв 16, 10:21    [18734352]     Ответить | Цитировать Сообщить модератору
 Re: MS Sql Server, индексы для таблиц и их ипользование  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4999
o-o
Megabyte,
жалко, что нет запроса, на к-ом он "не видит" нужный имеющийся индекс.
но спасибо за идею.
у нас тоже 2008 R2, понаблюдаю

Вот сегодня обнаружил еще такую фишку:
По таблице есть 2 одинаковых по содержанию индекса, по одному полю.
И по этому же полю таблицы система через запрос предлагала сделать еще один индекс.
Причем запрос висел в 10ке самых дорогих.
Удалил дублирующий индекс, тут же в запросе необходимых индексов новый индекс не исчез, но стал сильно ниже по стоимости(ушел далеко вниз).
6 апр 16, 15:25    [19023719]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить