一个简单的count(*)为何如此慢?

faucet 2003-10-16 03:05:33
firebird 1.0 记录约200万条,就一个表 三个大字段 blob
库文件大小 2.6G

一个select count(*) from tablename;
执行要几分种以上,
select max(field1 ) 也是这样

field1是主键 integer类型

同样结构的mysql 0.几秒都不要, why???????
...全文
110 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
faucet 2003-10-18
  • 打赏
  • 举报
回复
还有关于你说的 count(*)为全表扫描,max firebird不用索引是哪里的文档提到的

能提示一下么?谢了先
faucet 2003-10-18
  • 打赏
  • 举报
回复
我的意思就是象count统计记录总数,算一下max是很常用的功能呀,
是否只能用触发器来解决了呢?
CuteBit 2003-10-18
  • 打赏
  • 举报
回复
hi,faucet
不要指望文档会告诉你一切.很多东西需要你动手了解的,比如在 isql 或者其他工具中打开 plan 选项,就可以看到查询计划(类似 mssql 的查询分析).
我并不是说 count/max 等只能用触发器解决.我的建议是"如果你的设计方法由于数据量原因大大的影响效率,你可以考虑使用触发器记录下相关的统计信息.".

你遇到的是数据库大数据量的问题,有时你需要用非常规的设计提高效率,而不是单纯的依靠数据库系统的帮助.
faucet 2003-10-17
  • 打赏
  • 举报
回复
hi, cutebit

那在fb中如何做 count(field) 这样的应用呢?
max呢?
CuteBit 2003-10-17
  • 打赏
  • 举报
回复
hi,faucet
# select count(*) from tablename
这样的查询对 ib/fb(或oracle,好像 mssql 也是这样) 来说,需要全表扫描.对 200万 的记录过一遍耗几分钟不足为奇了.对某些数据库来说(informix,我想 mysql也是这样的)他们在系统内部储存有表的记录数,所以在这个上面要快许多.至于为什么不采用这样的方式,他们有他们的考虑.
# select max(field1)from tablename
对于 ib/fb 来说即使字段上有可用的索引(除非按到序排列),索引也不会被用到(我目前不清楚原理),但如果是 select min(field1) from talbename 会快许多,因为这时索引被用上了.
CuteBit 2003-10-17
  • 打赏
  • 举报
回复
faucet,不明白你的意思.
如果你的设计方法由于数据量原因大大的影响效率,你可以考虑使用触发器记录下相关的统计信息.
erickleung 2003-10-16
  • 打赏
  • 举报
回复
可有试过用firebird 1.5作比较吗?
firebird 1.0仍是 interbase 6.0的源码, 许多基本的运作还有不足之处. firebird 1.5是在这方法下了不少功夫呢.

若然 field1有索引, select max(field1),.. 是否一样吗?

在这个科技高速发展的时代,经历了PC时代几乎人手一台电脑,随之衍生出站长这个概念;移动互联网时代几乎人手一部智能手机,智能手机一般都会安装很多应用,目前应用呈爆发式的增长;随着产业的不断深入发展,小程序的发展也日益壮大,应用涵盖各个领域;如今一个公司就可能有多个软件应用,对于软件开发商来说,急需一套分析系统帮助软件运营,如果单独开发一个分析系统去针对一个软件进行分析的话,成本会非常的大,这个成本包含开发成本以及以后的维护成本。为了解决了上述的问题,我们开发出了一套云产品:亿级动态数据统计分析系统,本系统可以支持所有的终端  (Web端、移动端、小程序端等 )数据统计,只要简单的使用sdk就可以接入我们的系统,软件开发商可以很轻松的对软件使用的情况进行监控,及时辅助公司对该软件的运营。该产品历经2年的实践,商业价值极高。本套案例是完全基于真实的产品进行开发和讲解的,同时对架构进行全面的升级,采用了全新的 Flink 架构+Node.js+Vue.js等,完全符合目前企业级的使用标准。对于本套课程在企业级应用的问题,可以提供全面的指导。Flink作为第四代大数据计算引擎,越来越多的企业在往Flink转换。Flink在功能性、容错性、性能方面都远远超过其他计算框架,兼顾高吞吐和低延时。Flink能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能。也就是说同时支持流处理和批处理。Flink将流处理和批处理统一起来,也就是说作为流处理看待时输入数据流是无界的;批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的。Flink技术特点1. 流处理特性支持高吞吐、低延迟、高性能的流处理支持带有事件时间的窗口(Window)操作支持有状态计算的Exactly-once语义支持高度灵活的窗口(Window)操作,支持基于time、count、session,以及data-driven的窗口操作支持具有Backpressure功能的持续流模型支持基于轻量级分布式快照(Snapshot)实现的容错一个运行时同时支持Batch on Streaming处理和Streaming处理Flink在JVM内部实现了自己的内存管理支持迭代计算支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存2. API支持对Streaming数据类应用,提供DataStream API对批处理类应用,提供DataSet API(支持Java/Scala)3. Libraries支持支持机器学习(FlinkML)支持图分析(Gelly)支持关系数据处理(Table)支持复杂事件处理(CEP)4. 整合支持支持Flink on YARN支持HDFS支持来自Kafka的输入数据支持Apache HBase支持Hadoop程序支持Tachyon支持ElasticSearch支持RabbitMQ支持Apache Storm支持S3支持XtreemFS课程所涵盖的知识点包括:Flink、 Node.js、 Vue.js、 Kafka、Flume、Spring、SpringMVC、Dubbo、HDFS、Hbase、Highcharts等等  企业一线架构师讲授,代码在老师指导下可以复用,提供企业解决方案。  版权归作者所有,盗版将进行法律维权。   

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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