表统计信息是数据库基于成本的优化器最重要的参考信息;统计信息不准确,优化器可能给出不够优化的执行计划或者是错误的执行计划。对统计信息的计算分为非持久化统计信息(实时计算)与持久化统计信息。
目前创新互联已为近1000家的企业提供了网站建设、域名、虚拟主机、网站托管、服务器租用、企业网站设计、安源网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
非持久化统计信息
统计信息没有保存在磁盘上,而是频繁的实时计算统计信息;
每次对表的访问都会重新计算其统计信息;
假设针对一张大表的频繁查询,那么每次都要重新计算统计信息,很耗费资源。
持久化统计信息
把一张表在某一时刻的统计信息值保存在磁盘上;
避免每次查询时重新计算;
如果表更新不是很频繁,或者没有达到 MySQL 必须重新计算统计信息的临界值,可直接从磁盘上获取;
即使 MySQL 服务重启,也可以快速的获取统计信息值;
统计信息的持久化可以针对全局设置也可以针对单表设置。
接下来,详细说 MySQL 统计信息如何计算,何时计算,效果评估等问题。在 MySQL Server 层来控制是否自动计算统计信息的分布,并且来决策是持久化还是非持久化。
如果单纯统计一个表有多少条数据的话,可以 select count(1) from table_name 有额外条件的话可以写: select count(1) from table_name where a 10 统计某个字段可以: select count(字段名) from table_name 统计某个字段的唯一值数量(去重)...
数据库分库分表是缓解数据库服务器压力和增加并发量的途径之一,但是随着分库分表之后,也不可避免的带来了一些问题,很显而易见的问题就是如何解决分库后的查询统计。分库之后没有SQL可以用了,简单的过滤后再合并还可以做,但分组都会很麻烦,必须把分库分组汇总结集再分组汇总。这对很多java应用程序员来讲是个挑战。但是,数据量太大大,不分库也不行,进退两难。
这时候,采用集算器来做后一步的汇总计算就很容易,比如刚才说的分组汇总问题,写出来只要这么几行:
这里实现分组的代码还考虑了让分库并行执行SQL。
利用集算器实现分库汇总里包含几个典型例子来说明分库汇总的用法,跨库数据表的运算 是有关分库后统计查询的更详细解释,还有讲解视频分库后的统计查询梳理要点和难点。集算器还很容易嵌入到Java应用程序中,Java 如何调用 SPL 脚本 有使用和获得它的方法。关于集算器安装使用、获得免费授权和相关技术资料,可以参见 集算器如何使用 。