Sybase强制向后扫描

时间:2017-06-27 15:43:20

标签: sql indexing sybase sybase-ase sql-execution-plan

我在索引日期列上有一个带有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索引)吗?谢谢。

1 个答案:

答案 0 :(得分:0)

Sybase配置的值是什么参数允许反向扫描:

exec sp_configure "allow backward scans"
go

上面的代码应显示当前值,默认为ON但可能在您的环境中关闭了?