【发布时间】:2016-05-11 15:59:36
【问题描述】:
我正在大桌子上执行命令。它有大约 7 百万行。
命令是这样的:
select * from mytable;
现在我将行数限制在 3 百万左右。我正在使用这个命令:
select * from mytable where timest > add_months( sysdate, -12*4 )
我在时间列上有一个索引。但成本几乎相同。我预计它们会减少。我究竟做错了什么? 有什么线索吗? 先感谢您!
【问题讨论】:
-
能否包含执行计划?
EXPLAIN PLAN FOR select * from mytable where timest > add_months( sysdate, -12*4 ) -
你在看什么告诉你成本是一样的?
-
您正在从 Oracle 检索大量数据。这可能是获取数据的主要时间。
-
您将带回 700 万行中的 3 行。让 Oracle 进行索引查找,然后获取数据会比只运行表要慢。当然,读取 300 万行并将它们返回给客户端需要时间。这是通过连接推送的大量数据。想想看——如果每一行只包含 1Kb 的数据,这就像下载一个 3GB 的文件,在 100MBps 的互联网连接下需要 5 分钟,这还不包括读取和丢弃其他 4GB 数据的时间,或假脱机时间显示在屏幕上。
标签: sql oracle performance oracle11g