我在索引日期列上有一个带有order by子句的sybase查询。 索引是:
create clustered index DATE_IDX on dbo.MY_TABLE ( DATE_COLUMN ASC )
我希望索引是:
create clustered index DATE_IDX on dbo.MY_TABLE ( DATE_COLUMN DESC, [... some other columns in my ORDER BY clause] )
但我不能,因为我使用的基础设施不支持DESC索引。
如果我通过DATE_COLUMN ASC或DESC订购,我的查询工作正常,但是一旦我在订购DATE_COLUMN DESC时向order by子句(在DATE_COLUMN之后)添加更多列,我的性能就会非常糟糕。
当我检查查询计划时,问题就变得很明显了。
应该是
Nested iteration.
Using Clustered Index.
Index : DATE_IDX
Backward scan.
Positioning at index end.
但反而是
Nested iteration.
Using Clustered Index.
Index : DATE_IDX
Forward Scan.
Positioning at index start.
如果我创建了一个DESC索引,我的问题就解决了(它变得非常快,但我不能在生产环境中这样做)。 有没有办法强制进行反向扫描?我的问题还有其他解决方案(除了创建DESC索引)吗?谢谢。
答案 0 :(得分:0)
Sybase配置的值是什么参数允许反向扫描:
exec sp_configure "allow backward scans"
go
上面的代码应显示当前值,默认为ON但可能在您的环境中关闭了?