最近系统出了一点问题。在客户那边,因为系统的用户规模的变大,历史数据变得特别大。十来天的数据就有上千万了。系统本身就是一个准实时系统,响应要求较高。但是有个数据库操作却需要化4分钟多。客户没法接受了。这个操作是通过一个存储过程来做的。模拟了一个环境,测试了一下,发现是其中的一个查询特别费时。
语句很简单:select count(*) into @totalCount from A where ( condition1 or conditon2) and condition3 and condition4
表A的数量大概是一千五百万,查询语句的结果是6000多。查了查,该有的索引都有了。
用的是MySQL的InnoDB。对于InnoDB来说,上千万的数据确实是多了。需要从SQL语句本身来优化确实很不容易了。但是这个语句的问题也很明星,条件or很扎眼。肯定有问题。改一下:
select count(*) into @a from A where condition1 and condition3 and condition4;
select count(*) into @a from A condition2 and condition3 and condition4;
set @totalCount=@a+@b;
效果很明显,只需5秒多就出来了。
有时使用几个简单的语句可能比复杂的一条语句更有效。这个当然得看数据库。最好是测试一些。
在这种还想起了MySQL一个让很多人头疼的问题:就是count的速度问题。当count的数据量很大时,InnoDB的速度确实很不敢恭维。在数据库端确实也没有什么特别好的解决方法。既然在数据库端没法解决,那能不能在应用端解决呢。因为MySQL对SQL语句的执行是单CPU的,而现在机器都有多颗CPU,能不能把count语句按一定的条件分成多个语句进行并发查询,然后再把结果相加呢。Java自1.5版本加了concurrent包之后,对于并发编程已经是相当简单了。可以试试。当然在实际应用中还要考虑另一个问题:数据库连接数的问题,并发查询语句多了,连接数自己就增加了。有没有效果,还得看具体应用。
分享到:
相关推荐
该解决方案是为计算机教学量身定制的“云计算”解决方案。定制化的教学管理软件和虚拟化平台,功能设计化繁为简。根据教师、学生的使用习惯与教学流程,优化了教学常用功能并进行深度设计;采用高性能云主机和独创的...
帮助解决网页和JS文件中的中文编码问题的小工具 慎用const关键字 装箱,拆箱以及反射 动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个...
使在mysql5.0.xx 环境正常安装使用 1) 解决索引过长问题,把4个 acl 表的字段 section_value 和 value 统一为 varchar(100),字段 name 统一为 varchar(255) 2) 优化表,清除没用的或重复的索引 3) 改进...
7、解决热点关键词无作用问题。 8、手机网站实现2级栏目自定义管理。 9、完善生成手机静态页全部分项生成功能。 10、完善微信自定义菜单设置。 11、改进微信公众平台管理功能。 12、优化后台UI设计。 13、增强后台...
Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...
Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...
Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...
Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...
Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...
Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...
Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...
Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...
Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...
Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...
Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...
Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...
Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...
让应用的扩展更加方便,基于MVC(Model-View-Controller,模型-视图-控制器)模式,并且均支持多层(multi-Layer)设计,全面采用命名空间方式定义和加载类库文件,有效的解决多个模块之间的冲突问题,并且实现了更加...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...