为什么一条这么简单的语句要花费这长时间,求指教!

十一月的天蝎兽 2014-09-29 12:08:52
本人用Oracle 11g,64位WIN7。
以下是执行语句:
SELECT COUNT(*) FROM DOC_CARD D;
该语句只需花费0.015s,DOC_CARD表才61条数据。
可一旦加上一个非索引的条件时,却出奇的慢:
SELECT COUNT(*) FROM DOC_CARD D WHERE D.VOL_SEQ = 0;
一个只有61条数据的表,居然要花费6s的时间!
VOL_SEQ没有建索引,如果换作其他有索引的列作为条件查询的话,就只需要0.02s左右。
之前这张表里有1000W条数据,昨天早上被我DELETE了。现在一个只有60条数据的表WHERE条件查询居然跟1000W数据所用的时间差不多。
跪求指教。。。
...全文
136 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我想不明白,这个耗费为什么这么高。 而在另一台机器上的数据库中执行相同的语句,其耗费却只有3. (我本机上的数据库跟那台机上的数据库是一样的。)
  • 打赏
  • 举报
回复

这个是我查看解释执行器的结果
  • 打赏
  • 举报
回复
quote=引用 3 楼 bw555 的回复:] 高水位问题 你的数据虽然delete掉了,但是数据占用的空间并没有被释放,因此查询的时候还是会查询整个空间去检索,所以查询的时间和删除之前基本是一样的[/quote] 嗯。多谢版主,让我今天又学到了新东西。问题已经解决了。
sych888 2014-09-29
  • 打赏
  • 举报
回复
收集一些统计信息,如果是生产库的话,应小心更新
  • 打赏
  • 举报
回复
引用 4 楼 bw555 的回复:
减低水位可以这样 1、导出数据 2、用truncate截断表,释放表占用的空间 3、再将数据导回 这样操作完成之后,查询速度应该就变快了
还是版主关心民生啊。我先试试,再回向你报告这个问题。
bw555 2014-09-29
  • 打赏
  • 举报
回复
减低水位可以这样 1、导出数据 2、用truncate截断表,释放表占用的空间 3、再将数据导回 这样操作完成之后,查询速度应该就变快了
bw555 2014-09-29
  • 打赏
  • 举报
回复
高水位问题 你的数据虽然delete掉了,但是数据占用的空间并没有被释放,因此查询的时候还是会查询整个空间去检索,所以查询的时间和删除之前基本是一样的

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧