免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5670 | 回复: 9
打印 上一主题 下一主题

7秒与3分钟的差距,求教关于select count(*) 的优化问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-20 16:17 |只看该作者 |倒序浏览
select count(*) from (select distinct field1 from TAB1)

上面的查询中TAB1.field1建有索引,因此理论上数据库应该检索索引,提高效率。
但是在informix 中无论怎样调整,都是SEQUENTIAL SCAN

实际运行时,TAB1有1000万条记录,在Informix中需要3分钟运行,还是unix服务器。
但是在Oracle数据库,自己的ibm笔记本电脑,不用特别优化,同样的数据,只需要7秒。

这个差别也太大了,可以说是为什么informix没落的原因,至少我是不得已才使用IDS。


诸位大侠有何优化策略?

论坛徽章:
0
2 [报告]
发表于 2009-05-20 16:33 |只看该作者
执行以下update statistics high for tab TAB1然后再试

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
3 [报告]
发表于 2009-05-20 16:44 |只看该作者

回复 #1 midea0978 的帖子

注册6年~发帖一个...

BTW:每种数据库都有自己的优势..别的不想说..实际上informix的末落是ibm的原因...

论坛徽章:
0
4 [报告]
发表于 2009-05-20 17:07 |只看该作者
呵呵,关键时刻动用了这个古董账号,其实本人平时用另外一个ID,呵呵

论坛徽章:
0
5 [报告]
发表于 2009-05-21 14:30 |只看该作者

回复 #1 midea0978 的帖子

我可以告诉你一个经历,用select count(*) from tab1,无论多少记录都立即返回结果,但是和select count(*) from tab1 where 1=1的时间差异很大,甚至结果都可能不一样。所以需要update statistics,因为所谓快只是把统计更新的数据直接返回给你而已。就看统计信息自动更新的执行程度了。
按照你的情况,系统采取全表扫描,除了更新一下统计信息外,还可以用{}指定索引。

[ 本帖最后由 3sane 于 2009-5-21 14:33 编辑 ]

论坛徽章:
11
数据库技术版块每日发帖之星
日期:2016-06-25 06:20:00数据库技术版块每日发帖之星
日期:2016-06-24 06:20:00数据库技术版块每日发帖之星
日期:2016-05-03 06:20:00数据库技术版块每日发帖之星
日期:2016-04-21 06:20:00数据库技术版块每日发帖之星
日期:2016-01-23 06:20:00数据库技术版块每日发帖之星
日期:2015-12-03 06:20:00综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-19 06:20:00数据库技术版块每日发帖之星
日期:2015-08-20 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2016-07-30 06:20:00
6 [报告]
发表于 2009-05-22 12:33 |只看该作者
count(*)就是直取系统表的所以快
from ()这种子查询再count不可能快
可能是informix对这种子查询支持不好
能不能去改改sql语句

论坛徽章:
0
7 [报告]
发表于 2009-06-03 08:44 |只看该作者
建议先select into到临时表里,再对临时表count。

论坛徽章:
0
8 [报告]
发表于 2009-06-08 14:50 |只看该作者

回复 #8 0224238 的帖子

update statistics 不能说是INFORMIX的特色吧?起码DB2也有runstats对应。都是为了提高数据库的性能。

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
9 [报告]
发表于 2009-06-09 10:28 |只看该作者

回复 #9 3sane 的帖子

oracle似乎也有类似的东东~

论坛徽章:
0
10 [报告]
发表于 2009-06-11 16:12 |只看该作者
不会用,不要说informix差。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP