version은 SQL Server 2017 입니다.
orderdate 컬럼으로 partition되어 있습니다.
create nonclustered index orders_range_x02 on orders_range(orderdate, orderid)
아래 퀄리 수행 후 실행계획 보면 partition pruning이 발생하고 있습니다.
select orderdate, count(*)
from orders_range
where orderdate = '19980630'
and orderid = 80017
group by orderdate
go
--StmtText중 일부
|--Index Seek(OBJECT:([jwjung].[dbo].[Orders_Range].[orders_range_x02]), SEEK:([PtnId1001]=(3) AND [jwjung].[dbo].[Orders_Range].[OrderDate]='19980630' AND [jwjung].[dbo].[Orders_Range].[OrderID]=(80017)) ORDERED FORWARD)
그런데 아래 sql 수행 후 실행계획 보면, 상수를 변수로 치환 하면서 partition pruning이 발생하지 않는것 같습니다.
왜 상수값 변수를 @1, @2 로 바인드 변수처럼 변환하는지 이해가 안가네요.
2017 버전 버그인가요?
select orderdate, orderid
from orders_range
where orderdate = '19980630'
and orderid = 80017
go
--StmtText중 일부
|--Index Seek(OBJECT:([jwjung].[dbo].[Orders_Range].[orders_range_x03]), SEEK:([jwjung].[dbo].[Orders_Range].[OrderDate]=[@1] AND [jwjung].[dbo].[Orders_Range].[OrderID]=[@2]) ORDERED FORWARD)