Sybase 12.5.3 (ASE)を使用しています。MSSQL をかなり広範囲に使用してきましたが、Sybase は初めてです。ストアド プロシージャが非常に遅いシナリオに直面しています。比較的大きなテーブルの単一の SELECT stmt に問題を追跡しました。そのステートメントを変更すると、プロシージャーのパフォーマンスが劇的に改善されます (元に戻すと、大幅に速度が低下します。つまり、SELECT ステートメントが間違いなく原因です)。
-- 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 がインデックスを選択し、別のテーブルから選択するときにテーブル スキャンを選択する理由がわかりません。誰か手がかりを教えてください。よろしくお願いします。