データベースの第一人者は、クエリのリファクタリングを提案しています。
SELECT * FROM MyTable
WHERE UnIndexedDate
BETWEEN '2012-08-01' AND '2012-09-01'
に
SELECT * FROM MyTable
WHERE IndexedID
BETWEEN (SELECT MIN(IndexedID) FROM MyTable WHERE UnIndexedDate BETWEEN '2012-08-01' AND '2012-08-30')
AND (SELECT MAX(IndexedID) FROM MyTable WHERE UnIndexedDate BETWEEN '2012-08-01' AND '2012-08-30')
テーブルは列にインデックス付けされていませんが、UnIndexedDate
列にインデックス付けされていることに注意してくださいIndexedID
。このテーブルには、数百万のレコードが含まれています。
これは明らかにクエリの速度を向上させます。サブクエリは1回だけ実行され、インデックス付きフィールドが含まれるため、何らかの方法ではるかに効率的になる可能性があるためだと思います。
私の質問は、これは一般的にほとんどのデータベースに当てはまるのか、それともここではSQL2000データベースだけに当てはまるのかということです。
追加:ところで、IndexedIDは数値であり、一意であり、厳密に増加しています。