【发布时间】:2012-12-13 10:47:59
【问题描述】:
我有一个名为hitlist 的表,它有 3 列:
int id
long hitlisted_date
long deleted_date
我将根据这些列查询此表:
histlisted_date (frequent)
hitlisted_date && deleted_date (frequent)
deleted_date (not frequent)
在这种情况下,我应该使用什么样的索引?
-
hitlisted_date&deleted_date上的单独索引 -
hitlisted_date和deleted_date上的组索引
更新
该表将只有 1000 - 5000 行。
这些是将要使用的查询模式。
1) hitlisted_date BETWEEN
2) hitlisted_date
3) deleted_date = -1 和 hitlisted_date
4) 删除日期 > 0
对于上述模式,这些索引就足够了吗?
- 在 hitlist(hitlisted_date) 上创建索引 i1_hitlist;
- CREATE INDEX i2_hitlist ON hitlist(deleted_date, hitlisted_date);
【问题讨论】:
-
请注意,DATE(-1) 是 1899-12-30。如果一切都足够新以至于不会干扰,那没关系,但就在不久前,普遍流通的人比这更老。
-
日期列是
long数据类型(纪元时间) -
所以它们不是 DATE 类型。它们是 INTEGER 列。 Informix 中的 DATE 类型具有特定的含义。 (而且 1969-12-31 23:59:59 比 1899-12-30 更新;即使这样也可能不是问题,但要小心。)
-
看起来您需要将 LONG 时期转换为 DATETIME 或 DATE 类型列才能正确执行日期算术查询。