Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема с планом (не понимаю его)  [new]
Иванчин Вячеслав
Member

Откуда: из аула Алматы
Сообщений: 212
есть некая таблица
tbl_szak
она имеет порядком 70 полей, разных типов и размерности. В таблице 280 000 тысяч записей

делаю запрос
select * from tbl_szak  sz where 
	(sz.CheckedNew = 0 AND sz.VYHRB_ID = 12)

где в поле VYHRB_ID индексировано

вот его статистика
tatistics for INDEX 'IDX_VYHDB_ID'.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Updated                         Rows                            Rows Sampled                    Steps                           Density                         Average Key Length              
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
IDX_VYHDB_ID                    апр 16 2013  9:44AM             271711                          271711                          12                              0                               8                               NO                              

All Density                     Average Length                  Columns                         
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0.08333334                      4                               VYHRB_ID                        
3.680381E-06                    8                               VYHRB_ID, SZAK_ID               

Histogram Steps                 
RANGE_HI_KEY                    RANGE_ROWS                      EQ_ROWS                         DISTINCT_RANGE_ROWS             AVG_RANGE_ROWS                  
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1                               0                               14500                           0                               1                               
2                               0                               18137                           0                               1                               
3                               0                               18586                           0                               1                               
4                               0                               16105                           0                               1                               
5                               0                               16297                           0                               1                               
6                               0                               17271                           0                               1                               
7                               0                               18402                           0                               1                               
8                               0                               22408                           0                               1                               
9                               0                               22364                           0                               1                               
10                              0                               23482                           0                               1                               
11                              0                               41800                           0                               1                               
12                              0                               42359                           0                               1                               


и план выполнения [img=C:\Documents and Settings\VIvanchin\Мои документы\Мои рисунки\1.jpg]
сервер
Microsoft SQL Server 2005 - 9.00.4035.00 (X64) Nov 24 2008 16:17:31 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)


вопрос почему cost составляет порядком 12, и не ищет по индексу поля VYHRB_ID а ищет полю первичного ключа?

К сообщению приложен файл. Размер - 53Kb
16 апр 13, 07:58    [14184939]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с планом (не понимаю его)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
Иванчин Вячеслав
вопрос почему cost составляет порядком 12, и не ищет по индексу поля VYHRB_ID а ищет полю первичного ключа?
Наверное, селективность маленькая (Density=8, All Density=0.08), считает, что быстрее сканировать.

А сколько всего записей возвращает запрос, может, сделать составной индекс CheckedNew, VYHRB_ID?
16 апр 13, 08:20    [14184964]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с планом (не понимаю его)  [new]
Иванчин Вячеслав
Member

Откуда: из аула Алматы
Сообщений: 212
alexeyvg,

возвращает порядком 30 000 записей

Составной индекс сделал, цена запроса осталась без изменения. Так же почему то использует первичный ключ!
16 апр 13, 09:12    [14185144]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с планом (не понимаю его)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Иванчин Вячеслав
вопрос почему cost составляет порядком 12, и не ищет по индексу поля VYHRB_ID а ищет полю первичного ключа?

Вы считаете, что выгоднее сначала выбрать 30000 записей из VYHRB_ID, а потом для каждой делать lookup в таблицу за остальными полями ?

Сообщение было отредактировано: 16 апр 13, 09:15
16 апр 13, 09:14    [14185158]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с планом (не понимаю его)  [new]
Иванчин Вячеслав
Member

Откуда: из аула Алматы
Сообщений: 212
Glory,

так и получается так же, что пробегается по первичному ключу порядкрок 300 000 записей а по мере нахождение удовлетворяющий условию запись отображается! А если выбирать не по первичному ключу получиться выбрать записей порядком 40 000 и пробежаться уже по ним!

да и ситуация с составным ключом такая же, составной ключ есть а при построение плана используется первичный ключ!

как тогда создаётся план!! Потому что очень много таких запросов, где используется не составной ключ а первичный. Этот я взял за основу, с ним пойму что не так делается с вашей помощью, остальные уже пойдут как по маслу!
16 апр 13, 09:30    [14185250]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с планом (не понимаю его)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Иванчин Вячеслав
А если выбирать не по первичному ключу получиться выбрать записей порядком 40 000 и пробежаться уже по ним!

А откуда в индексе возьмутся поля, не входящие в него, но которые вы указали выбрать в select * ?
16 апр 13, 09:33    [14185273]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с планом (не понимаю его)  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Иванчин Вячеслав
Составной индекс сделал, цена запроса осталась без изменения. Так же почему то использует первичный ключ!
Селективность вашего индекса низкая и оптимизатор считает, что его просто невыгодно использовать. Выполните
set statistics io on;
set statistics time on;

select * from tbl_szak  sz where 
	(sz.CheckedNew = 0 AND sz.VYHRB_ID = 12)

select * from tbl_szak  sz with (index = IDX_VYHDB_ID) where 
	(sz.CheckedNew = 0 AND sz.VYHRB_ID = 12)

set statistics io off;
set statistics time off;
И сравните статистику выполнения.
16 апр 13, 09:35    [14185290]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с планом (не понимаю его)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
Иванчин Вячеслав
alexeyvg,

возвращает порядком 30 000 записей

Составной индекс сделал, цена запроса осталась без изменения. Так же почему то использует первичный ключ!
Ну, для 10% записей выгоднее сделать скан, чем потом 30 000 раз выполнить поиск (кей лукап)
Иванчин Вячеслав
так и получается так же, что пробегается по первичному ключу порядкрок 300 000 записей а по мере нахождение удовлетворяющий условию запись отображается! А если выбирать не по первичному ключу получиться выбрать записей порядком 40 000 и пробежаться уже по ним!
Пробежаться - это потоком отсканировать непрерывную последовательность страниц, а "выбрать записей порядком 40 000 и пробежаться уже по ним" - это выполнить 40 000 отдельных поисков, это намного хуже!

Если вам нужны не все поля из таблицы, то можно к индексу (CheckedNew, VYHRB_ID) добавить (INCLUDE) нужные поля, тогда будет быстрее.
Можно даже добавить все поля, если интенсивность обновлений невысокая, а интенсивность выборок высокая.
16 апр 13, 09:41    [14185331]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с планом (не понимаю его)  [new]
Иванчин Вячеслав
Member

Откуда: из аула Алматы
Сообщений: 212
invm,

сравнил и всё стало понятно!
16 апр 13, 09:59    [14185419]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с планом (не понимаю его)  [new]
Иванчин Вячеслав
Member

Откуда: из аула Алматы
Сообщений: 212
Glory,

действительно, указал только нужные поля и составной индекс сразу подключился к выполняющему запросу.
16 апр 13, 10:02    [14185434]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с планом (не понимаю его)  [new]
Иванчин Вячеслав
Member

Откуда: из аула Алматы
Сообщений: 212
теперь вопрос по статистике (на самом деле я полный дуб в MS SQL ранее работал с Firebird)

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

set statistics io on;
set statistics time on;

select fp_id, rubsng_id from tbl_szak where (vyhrb_id =12 and checkednew= 0)
/*(29149 row(s) affected)
Таблица "tbl_SZAK". [b][b]Число просмотров 5[/b], логических чтений 17970,[/b] физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.*/

select * from tbl_szak  sz where 
	(sz.CheckedNew = 0 AND sz.VYHRB_ID = 12)
/*(29149 row(s) affected)
Таблица "tbl_SZAK". [b]Число просмотров 1, логических чтений 16337,[/b] физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.*/

set statistics io off;
set statistics time off;   
16 апр 13, 13:57    [14186929]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с планом (не понимаю его)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Иванчин Вячеслав
запрос по сути один, но разное количество просмотров!

По сути или по плану ?
16 апр 13, 14:02    [14186963]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с планом (не понимаю его)  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
У вас разные запросы, следовательно разные планы выполнения, следовательно разная статистика.
16 апр 13, 14:04    [14186974]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с планом (не понимаю его)  [new]
Иванчин Вячеслав
Member

Откуда: из аула Алматы
Сообщений: 212
Glory,

лучше уж по сути, просто не понимаю разницу вытаскиваешь все поля количество просмотров 1 а когда только определенные поля количество подскакивает в 5 раз! От чего так?
16 апр 13, 14:04    [14186978]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с планом (не понимаю его)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Иванчин Вячеслав
лучше уж по сути

Сервер работает согласно своему плану, а не вашей сути.
Почему для разных запросов статистика чтений должна быть одинаковой ?
16 апр 13, 14:06    [14186990]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с планом (не понимаю его)  [new]
Иванчин Вячеслав
Member

Откуда: из аула Алматы
Сообщений: 212
Glory,

Условие одинаково от сюда и думаю что всё должно быть одинаково. Посмотрел план, план один и тот же! Просто интересно как влияет выбор полей на количество просмотров!?
16 апр 13, 14:09    [14187006]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с планом (не понимаю его)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Иванчин Вячеслав
Условие одинаково от сюда и думаю что всё должно быть одинаково

Да что вы говорите ?
select * from Atable1
select * from Btable2
Условие одинаковое - почему статистика разная ?


Иванчин Вячеслав
Посмотрел план, план один и тот же! Просто интересно как влияет выбор полей на количество просмотров!?

Планы наверняка разные.
16 апр 13, 14:13    [14187038]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с планом (не понимаю его)  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
set statistics profile on;
go

select fp_id, rubsng_id from tbl_szak where (vyhrb_id =12 and checkednew= 0)

select * from tbl_szak  sz where 
	(sz.CheckedNew = 0 AND sz.VYHRB_ID = 12)
go

set statistics profile off;
go
И покажите получившееся планы в текстовом виде. Они наверняка будут разные.
16 апр 13, 14:21    [14187090]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с планом (не понимаю его)  [new]
Иванчин Вячеслав
Member

Откуда: из аула Алматы
Сообщений: 212
Glory,

план да различаются, тоже по глупому. Что за слово такое иноземное параллелизм? основная выборка так же идет по ключевому полю!

К сообщению приложен файл. Размер - 42Kb
16 апр 13, 14:33    [14187163]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с планом (не понимаю его)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Иванчин Вячеслав
Что за слово такое иноземное параллелизм?

Откройте (во всех смыслах) для себя хелп.
В строке поиска хелпа достаточно набрать parellelism
Можете вообще начать со статьи Logical and Physical Operators Reference
16 апр 13, 15:32    [14187681]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить