一位数据库专家建议重构查询:
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
。这个表有几百万条记录。
它显然确实提高了查询的速度,我怀疑这是因为子查询只会执行一次,甚至可能在某种程度上更有效,因为它们涉及索引字段。
我的问题是,这通常适用于大多数数据库还是仅适用于这里的 SQL2000 数据库。
补充: BTW IndexedID 是数字,唯一且严格递增。