检查查询在您为谓词列创建索引时如何使用范围谓词。
在使用范围谓词的下列情况下,选择 DATE 、 TIME 或 DTTM 索引处理查询:
SELECT * FROM tab WHERE col1 < ‘2002/10/09’;SELECT * FROM tab WHERE col2 >= ‘2002/01/01 09:12:04.006’; 比较运算符一侧是列名,另一侧是常量表达式(常量值或主变量)。
SELECT * FROM tab WHERE col3 BETWEEN ‘09:12:04.006’ AND ‘20:12:04.006’;SELECT * FROM tab WHERE col2 BETWEEN tmp_datetime1 AND tmp_datetime2;
对于这些查询类型, DATE 、 TIME 或 DTTM 索引通常比 HNG 索引的执行速度更快。
在下面三种特定情况中,使用 DATE 或 DTTM 索引可以显著提高性能:
SELECT * FROM tab WHERE col1 BETWEEN ‘1993-01-01’ AND ‘1996-12-31’;SELECT * FROM tab WHERE col1 >= ‘1993-01-01’ ANDcol1 < ‘1997-01-01’;SELECT * FROM tab WHERE col2 BETWEEN ‘1993-01-01 00:00:00.000000’ AND ‘1996-12-31 23:59:59.999999’;
SELECT * FROM tab WHERE col1 > ‘1993-01-31’ ANDcol1 <= ‘1993-06-31’;SELECT * FROM tab WHERE col2 >= ‘1993-01-01 00:00:00.000000’ AND col1 < ‘1993-06-01 00:00:00.000000’;
SELECT * FROM tab WHERE col2 >= ‘1993-01-31 00:00:00.000000’ ANDcol2 <= ‘1993-01-31 23:59:59.999999’;
注意 在上面三种情况下,必须注意年范围、月范围和恰好一天的概念。例如,识别为年范围的 DTTM 索引包含四种情况: col2 > ’year1/12/31 23:59:59.999999’ andcol2 < ’year2/01/01 00:00:00.000000’col2 >= ’year1/01/01 00:00:00.000000’ andcol2 < ’year2/01/01 00:00:00.000000’col2 > ’year1/12/31 23:59:59.999999’ andcol2 <= ’year2/12/31 23:59:59.999999’col2 >= ’year1/01/01 00:00:00.000000’ andcol2 <= ’year2/12/31 23:59:59.999999’ 以下示例中的范围不符合年范围: col2 > ’year1/12/31 23:59:59.999999’ andcol2 <= ’year2/01/01 00:00:00.000000’col2 > ’year1/01/01 00:00:00.000000’ andcol2 < ’year2/01/01 00:00:00.000000’第一个范围不相符,因为除年范围之外,它还包括值 "year2/01/01 00:00:00:000000"。第二个范围缺少值 "year1/01/01 00:00:00.000000"。类似具体信息也适用于 DTTM 和 DATE 索引的月范围和恰好一天。
如果较小的日期范围(小于 60 个值)不适用于上面三种特定情况,则 HG 索引比 DATE 索引的执行速度更快。