sql – 针对高基数列的即席查询

如何针对具有数百个高基数列和数百万条记录的表提高即席查询的性能?

在我的例子中,我有一个表有一个索引DATE列SDATE,一个VARCHAR2列NE和750个数字列,其中大部分是高基数列,值范围为0到100.该表每小时更新近20000条新记录.针对此表的查询如下所示:

SELECT * FROM TAB WHERE SDATE BETWEEN :SDATE AND :EDATE AND V1 > :V1 AND V3 < :V3

要么

SELECT * FROM TAB WHERE SDATE BETWEEN :SDATE AND :EDATE AND NE = :NE AND V4 > :V4

等等

到目前为止,我一直建议用户不要输入大的间隔日期,以便限制日期索引访问路径产生的记录数量;但是,有时需要指定更大的间隔.

如果V1,V2,…,V750都是低基数列,我本可以利用位图索引.不幸的是他们不是.

对此有何建议?我该如何解决这个问题?

谢谢.

最佳答案 我假设你一直坚持设计,所以我可能会考虑一些想法 –

1)使用分区 – 如果你有分区选项

2)使用一些触发器来对查询表进行非规范化(或在这种情况下标准化),该查询表针对查询使用进行了更优化

3)制作一些快照

4)查看具有日期记录(或某些合适的子集)的当前表或一组表,并将它们滚动到一个大表来存储hsitory.

这取决于使用模式和系统具有的所有其他约束 – 这可能会让您入门,如果您有更多详细信息,可能会有更好的解决方案.

点赞