我正在使用Sybase 12.5.3 (ASE);我是 Sybase 的新手,尽管我已经广泛使用 MSSQL。我遇到了一个存储过程非常慢的场景。我已经将问题追溯到一个相对较大的表的单个 SELECT stmt。修改该语句显着提高了过程的性能(并且恢复它会大大减慢它;即,SELECT stmt 绝对是罪魁祸首)。
-- Sybase optimizes and uses multi-column index... fast!<br>
SELECT ID,status,dateTime
FROM myTable
WHERE status in ('NEW','SENT')
ORDER BY ID
-- Sybase does not use index and does very slow table scan<br>
SELECT ID,status,dateTime
FROM myTable
WHERE status in (select status from allowableStatusValues)
ORDER BY ID
上面的代码是实际代码的改编/简化版本。请注意,我已经尝试过重新编译过程、更新统计信息等。
我不知道为什么 Sybase ASE 只会在字符串被硬编码时选择索引,而在从另一个表中选择时选择表扫描。有人请给我一个线索,并提前谢谢你。