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

Откуда:
Сообщений: 401
Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (X64) Aug 19 2014 12:21:34 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

Есть таблица
CREATE TABLE [dbo].[Inv_Stat](
	[ID] [int] IDENTITY(-2147483648,1) NOT NULL,
	[date_add] [datetime] NOT NULL,
	[date_inv] [datetime] NULL,
	[CashierID] [int] NULL,
	[ShopNo] [int] NULL,
	[id_vikl] [int] NULL,
	[cnMust] [int] NULL,
	[cnGo] [int] NULL,
	[cnNot] [int] NULL,
 CONSTRAINT [PK_Inv_Stat] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
ALTER TABLE [dbo].[Inv_Stat] ADD  CONSTRAINT [DF_Inv_Stat_date_add]  DEFAULT (getdate()) FOR [date_add]
GO


есть индекс на ней
CREATE NONCLUSTERED INDEX [IX_for_Rep_347] ON [dbo].[Inv_Stat] 
(
	[date_inv] ASC,
	[cnGo] ASC
)
INCLUDE ( [ShopNo],
[id_vikl]) 
WHERE ([cnGo]=(0))
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


выполняю запрос:
select ShopNo, id_vikl
from Inv_Stat(nolock) i
where date_inv between CONVERT(date,getdate()) and DATEADD(day,1,convert(date,getdate()))
  and cnGo = 0 


получаю план, в котором есть Constant Scan
подскажите пожалуйста кто знает почему так, и можно ли избежать?

К сообщению приложен файл. Размер - 60Kb
16 янв 19, 12:03    [21786549]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с планом пожалуйста  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Sandist,

Вас слово SCAN пугает? Или что тут плохого?
16 янв 19, 12:17    [21786571]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с планом пожалуйста  [new]
Sandist
Member

Откуда:
Сообщений: 401
TaPaK,
я не понимаю почему эти действия там должны быть? из-за фильтра на индексе? это нормально?
16 янв 19, 12:20    [21786575]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с планом пожалуйста  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Sandist
TaPaK,
я не понимаю почему эти действия там должны быть? из-за фильтра на индексе? это нормально?

ну как-то ж надо посчитать

CONVERT(date,getdate()) and DATEADD(day,1,convert(date,getdate()))
16 янв 19, 12:22    [21786578]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с планом пожалуйста  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
у вас там несовподение типов
datetime вместо date это вычисление уйдёт
16 янв 19, 12:31    [21786591]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с планом пожалуйста  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
TaPaK
у вас там несовподение типов
datetime вместо date это вычисление уйдёт

точнее если в date то как-то так
 between CAST(CONVERT(date,getdate())  as datetime) and CAST(DATEADD(day,1,convert(date,getdate())) as datetime)
16 янв 19, 12:33    [21786593]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с планом пожалуйста  [new]
Sandist
Member

Откуда:
Сообщений: 401
TaPaK,
Блин, совсем не подумал про это
спасибо большое, мне это очень помогло
16 янв 19, 12:43    [21786606]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить