【发布时间】:2014-02-25 07:18:31
【问题描述】:
我正在编写一个存储过程以将汇总值从 task_history 表插入 task_activity_report 表。
表格
Task_history
----------------------------------------
Task_id Varchar2(32) PK
Event_dt Date
Event Varchar2(10)
......
......
......
SQL 查询:
SELECT task_id
FROM task_history
WHERE event = 'CLOSED'
AND event_dt BETWEEN 10 - nov - 13 AND 20 - nov - 13;
Between dates是做全表扫描,如何避免日期之间全表扫描查询?? 从 task_history 中选择 task_id,其中 event_dt 在 10-NOV-13 和 20-NOV-13 之间;
我的表有超过 1500 万条记录
感谢您的帮助和时间。非常适合。
CVSR 萨尔玛
【问题讨论】:
-
它基本上是 SQL 查询。我正在编写 Oracle 存储过程。
-
在 EVENT 上创建非聚集索引包括 taskid,在 event_dt 上创建非聚集索引。也只需使用正确的日期时间参数,不要在 even_dt 中使用任何强制转换/转换
-
可能的每月分区,有时会有所帮助
-
请发布表中相关列的 DDL、索引、查询的解释计划、列的基数、您希望查询返回的行数以及实际查询,因为这个不正确并且会出错。如果没有这些信息,您获得的任何帮助必然会变得模糊。
-
你可以edit你的问题包含额外的信息@sarma。但是,我说要得到一个好的答案,还需要很多额外的东西。
标签: sql performance oracle