안녕하세요?
제가 mssql 초보라 문의 드립니다.
인덱스가 아래와 같이 구성되어 있습니다.
orderdate char(8)
create nonclustered index orders_range_x02 on orders_range(orderdate, customerid)
아래는 튜닝 대상 SQL 입니다.
select orderdate, customer
from orders_range
where orderdate between '19971230' and '19980102'
and customerid = 'QUICK'
group by orderdate
go
인덱스 컬럼 순서만 바꾸면 block io가 줄어들지만, 인덱스를 건드리지 않고 sql 수정해서 block io를 줄이고 싶습니다.
오라클인 경우 아래와 같이 변경해서 간단히 해결 가능한데...
select orderdate, customer
from orders_range
where orderdate in (select to_char(to_date('19980102','yyyymmdd') - level + 1), 'yyyymmdd')
from dual
connect by level <= to_date('19980102','yyyymmdd') - to_date('19971230','yyyymmdd') + 1)
and and customerid = 'QUICK'
group by orderdate
mssql에서도 간단히 disk I/O 없이 19980102, 19980101, 19971231, 19971230 ... 을 만들어 낼 수 있는 방법이 있나요?
Comment 4
-
루디먼트
2019.09.11 09:08
master..spt_values 를 이용해 보세요. -
루디먼트
2019.09.11 09:14
select dateadd(day,rows,'1997-12-30') as orderdate
from (select top (datediff(day,'1997-12-30','1998-01-02'))
row_number() over(order by (select 1)) - 1 as rows
from master..spt_values
) as a -
루디먼트
2019.09.11 09:16
convert(char(8),컬럼,112) 를 추가하면 딱 원하는 형태로 나오겟네여~ -
james_12
2019.09.13 09:21
오~~~ 감사합니다.