我们有很多:
select count(*) from TBL where XDATE between ? and ? and FLD = ?;我们期望通过调整XDATE列上的索引来提高性能(XDATE列具有日期类型)。
哪种类型的索引更适合日期类型和之间的条件?
发布于 2013-08-02 10:57:23
如果提供了详细信息,两列索引可能是合理的:
CREATE INDEX tbl_index ON tbl(fld,xdate);
但当然,一切都取决于你的数据。
要收集数据,只需运行:
select count(*) from TBL;
select count(*) from TBL where XDATE between ? and ?;
select count(*) from TBL where FLD = ?;
select count(*) from TBL where XDATE between ? and ? and FLD = ?;并比较结果。或者用这些结果编辑你的问题。
发布于 2013-08-02 10:02:12
范围--特别是日期范围--可能很难调整。这是有区别的.
where xdate between date '2013-07-01' and date '2013-07-31'..。而这个..。
where xdate between date '2003-07-01' and date '2013-07-31'对于这两个查询,您需要完全不同的访问路径。索引有助于第一个索引,但对于第二个索引可能是灾难性的(取决于所涉及的数据量)。
索引日期的另一个障碍涉及时间元素。如果xdate包含时间元素,那么每个日历日可能有86400个不同的值。在大多数情况下,当我们做一个日期范围搜索,我们希望所有的点击率为一天,无论时间。
我们不能给出绝对的推荐,因为你没有提供足够的细节,但我的一般建议是:
create index tbl_xdate_idx on tbl(trunc(xdate))。https://dba.stackexchange.com/questions/47462
复制相似问题