Oracle 语句查询很快但SUM求和后就慢
Oracle语句SELECTSCOREFROMUSERWHEREAGE<25ANDAGE>15查询后用时0.0245但是如果SELECTSUM(SCORE)FROMUSE...
Oracle 语句 SELECT SCORE FROM USER WHERE AGE<25 AND AGE>15
查询后用时0.0245 但是如果
SELECT SUM(SCORE) FROM USER WHERE AGE<25 AND AGE>15 用时5分钟 。这里的AGE是有索引的。求高手解答 展开
查询后用时0.0245 但是如果
SELECT SUM(SCORE) FROM USER WHERE AGE<25 AND AGE>15 用时5分钟 。这里的AGE是有索引的。求高手解答 展开
6个回答
展开全部
在开发工具里面执行你第一个语句可能只查询了前10条,并没有把所有15~25岁的清单显示出来。
理论上你的两个语句执行时间应该是差不多的,你在第二个语句增加一个查询项目COUNT(*)试试看总共满足条件的数据有多少,看看第一条语句返回的结果是多少,是不是我上面说的情况。
理论上你的两个语句执行时间应该是差不多的,你在第二个语句增加一个查询项目COUNT(*)试试看总共满足条件的数据有多少,看看第一条语句返回的结果是多少,是不是我上面说的情况。
更多追问追答
追问
COUNT一下当然数据会很多啊 我就不知道为什么SUM 这么慢 COUNT也慢。
追答
很正常的呀,是会这么慢,如果你第一个语句把所有数据都显示出来,可能比第二个语句更慢。时间差异的关键,就是第一个语句只搜索数据库里面的几条,第二语句搜索数据库里面很多数据。好比第一个语句是到幼儿园随便抓个女孩看看口袋里面有多少钱,第二个语句是把幼儿园所有女孩的口袋里面的钱加起来,第一件事情非常简单,第二件时间非常困难,就是因为摸的口袋数不同。任何数据库都是这样的,幼儿园也是这样的。
展开全部
正常来说不可能这样,针对两个语句各做一个10046 trace,比较plan. row operation, 等待事件有什么不同
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
检查一下执行计划吧。如果不走索引,可以试试走索引的办法:
SELECT /*+ index(USER 索引名) */
SUM(SCORE) FROM USER WHERE AGE<25 AND AGE>15
这样写法保证走索引。
如果走索引还慢,可以试试不走索引是否能快一些:
SELECT /*+ full(USER ) */
SUM(SCORE) FROM USER WHERE AGE<25 AND AGE>15
这两种方法你选择一个相对快的就行了。
如果想再快,可以age和score联合建索引试试。
如果数据量大,并且其中数据多数都是15到25之间的,那么估计全表扫描会快一些。
SELECT /*+ index(USER 索引名) */
SUM(SCORE) FROM USER WHERE AGE<25 AND AGE>15
这样写法保证走索引。
如果走索引还慢,可以试试不走索引是否能快一些:
SELECT /*+ full(USER ) */
SUM(SCORE) FROM USER WHERE AGE<25 AND AGE>15
这两种方法你选择一个相对快的就行了。
如果想再快,可以age和score联合建索引试试。
如果数据量大,并且其中数据多数都是15到25之间的,那么估计全表扫描会快一些。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
user是oracle的保留字吧。。。。 这样用作表名不知道有没问题,另外AGE<25 AND AGE>15 换成age between 15 and 25试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
oracle的机制是基于代价的,可能没有走到索引上。
在plsql中点击F5,看看走没走到索引上
在plsql中点击F5,看看走没走到索引上
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询