mysql count 优化问题 5C

使用jdbcTemplate,做统一的分页查询的时候,
count(*)在数据量大的时候,总数查询非常慢,
有什么好的解决方案,
count(1)和count(*)就不要说了
也建了适当的索引,
使用结果集的游标直接指向最后能有效果么?

0

5个回答

count(索引),你分页查询要count干嘛?

0
 count(id)
0

分页了,还要cont是为了显示总条数?

0

大概的一个解决方案:

在某个空闲时间。比如每天0点,统计你要分页的这个表的总数,保存到另外一个表的字段里面去,
在当天之后的时间里,每次新增、删除数据到这个表的时候,同步更新另外一个表里面的总数。

这样每次获取的时候可以直接获取。

0

首先count(主键)肯定比count(*)|count(1)快,count(*)|count(1)的效率没有太大差别,count(主键)效率明显高
其次:你的场景是数据量非常大,呢么,用户很少会翻到最后一页,所以,可以将总数缓存起来,比如缓存到redis,当用户翻到最后一页的时候,再执行count更新redis缓存总数.另外可以设置一个定时任务,比如每隔2个小时,进行一次自动更新缓存,当然,这个有呢个万一的可能性就是用户在读最后一页,这时候执行更新,而定时任务恰好也执行!但是因为数据量非常大,这个总数本就可以做为一个近似数,没有必要保证一定是多少,所以这个误差完全空可以忽略不计,在这样的前提下,呢么等于你每次分页只需要拿你某一页的数据去数据库查,而永远不需要进行count计算,效率肯定快,而你的count计算要么是定时任务更新,要么是用户触发最后一页.所以这样的情况下,效率会高很多

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
mysql优化,不用怕面试题
第一方面:30种mysql优化sql语句查询的方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by涉及的列上建立索引。   2.应尽量避免在 where 子句中使用 !=或<> 操作符,否则将引擎放弃使用索引而进行全表扫描。   3.应尽量避免在 where 子句中对字段进行 null 值 判断,否则将导致引擎放弃使用索引而进行全表扫描,如: ...
MySQL中聚合函数count的使用和性能优化
本文的环境是Windows 10,MySQL版本是5.7.12-log 一、 基本使用count的基本作用是有两个: 统计某个列的数据的数量; 统计结果集的行数; 用来获取满足条件的数据的数量。但是其中有一些与使用中印象不同的情况,比如当count作用一列、多列、以及使用*来表达整行产生的效果是不同的。
从多表连接后的select count(*)看待SQL优化
从多表连接后的select count(*)看待SQL优化 一朋友问我,以下这SQL能直接改写成select count(*) from a吗? SELECT COUNT(*) FROM a LEFT JOIN b ON a.a1 = b.b1 LEFT JOIN c ON b.b1 = c.c1 废话不多说,直接上实验。 1. 准备数据 创建测试表a,b,c,并...
Count(*) 语句的优化问题?
Select count(*) From Article where fenlei=6 and ArticleID<100000 and isHide=0rn说明:建立有 ArticleID ,fenlei 索引,isHide 的值只有0和1,没有索引。rnrn语句执行,结果值为2300,执行时间130毫秒,扫描Article 2次,逻辑读 13000次。rnrn而如果只执行rnSelect count(*) From Article where fenlei=6 and ArticleID<100000rn则结果还是2300,执行时间0毫秒,扫描Article 1次,逻辑读 29次。rnrn只是增加了一个isHide=0条件,系统消耗就差别如此大。rnrn请问这个语句,该怎么优化?
MySQL优化、问题案例分析
有实例的案例分析,深度解读sql 优化,开发测试运维都适用,你值得拥有!
MySQL查询优化之COUNT()
COUNT()聚合函数,以及如何优化使用了该函数的查询,很可能是MySQL中最容易被误解的前10个话题之一,在网上随便搜索一下就能看到很多错误的理解,可能比我们想象的多得多。在做优化之前,先来看看COUNT()函数的真正作用是什么。COUNT()的作用COUNT()是一个特殊的函数,有两种非常不同的作用:它可以统计某个列值的数量,也可以统计行数。在统计列值时要求列值时非空的(不统计NULL)。如果在
Mysql中的count(*)的误解
有时候总认为count(*)会比count(1)或者count(column name)慢,其实这里面还是有个小坑的。让我们用一个例子来了解一下它们的区别:---初始化语句 create table test2 (id BIGINT PRIMARY key, name varchar(24))ENGINE=INNODB;insert into test2(id,name)values(1,null)
count(*)、count(1)、count(column)执行效率高低比较
count(*)、count(1)、count(column)区别 &amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;count(column) 会忽略为 null 的列,其他两个不会。 执行效率 &amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;am
MYSQL|count()函数使用条件分别统计
需求 SQL语句 select class1_id ,class1_name ,class2_id ,class2_name ,run_id ,count(run_id) as count_all#提交数 ,count(run_ok&amp;amp;amp;amp;gt;0 or null) as count_done#处理数 ,count(run_ok=1 or ...
百万行mysql,count()函数的思考与总结
如果你的需要是统计总行数时,为什么要使用count(*),而避免使用指定具体的列名?count()函数里面的参数是列名的的时候,那么会计算这个字段有值项的次数。也就是,该字段没有值的项并不会进入计算范围(就是网上常说的值为null的项不纳入统计)很多地方都有类似表述:COUNT ( column ) counts all non-NULL occurences (or should  …  计算所...
关于mysql中的count()函数
关于mysql中的count()函数
MYSQL查询语句 group by 与having count()讲解--玉米都督
    在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,  例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。  SELECT SUM(population) FROM bbc  这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有  国家的总...
MySQL 大表的count()优化
以下是基于我结合B+树的数据结构和对实验结果的推测作出的判断,如有错误,恳请指正!今天实验了一下MySQL的count()操作优化, 以下讨论基于mysql5.7 InnoDB存储引擎. x86 windows操作系统。创建的表的结构如下(数据量为100万): 首先是关于mysql的count(*),count(PK), count(1)哪个快的问题。 实现结果如下: 并没有什么区
Mysql中count()语法的使用
Mysql中count()语法的使用 count()四种写法: count(*) 包括所有列,相当于统计表的行数,不忽略列值为NULL的记录。 count(1) 忽略所有列,1表示一个固定值,也可以用count(2)、count(3)代替,不忽略列值为NULL的记录。 count(列名) 只包括指定列,返回指定列的记录数,会忽略列值为NULL的记录。 count(distinct 列名) 只...
MySql count去掉重复语句
MySql count去掉重复语句   1.select count(distinct CName) from Course 2.select count(CName) from (select distinct CName from Course) as tempas可有可无。temp作为别名,若无则提示错误:1248 – Every derived table must have its own
MySQL中count()函数的使用
基础必备:       在MySQL中,0或 NULL意味着假(0)而其它值意味着真(1)。布尔运算(age = 4 或者 age is null都是布尔运算)的默认真值是1。不能使用算数运算符与null做运算,其结果都是null:       select   1 + null,1 - null, 1 * null, 1 / null, 1 % null, 1 = null, 1 &amp;lt;&amp;...
MySQL系列-优化之count()
1.count()函数的作用 count()函数有两个作用,一是统计表数据的行数,二是统计某列非空值得数量。 我们用count(*)来统计行数,当然这个*可以是任意的常量,比如 1 'x' 666 之类的。 count(row)用来统计某列非空值得数量,这个row是列名。 2.count(1)会比count(*)快吗? 答案是不会,起码在我的mysql5.5上是这样的。 【当MyS...
Innodb中count的理解,count(*)存储使用缓存或者事务
首先需要声明,下面的内容主要是基于innodb;myIsam中会单独存储count(*)的值,因此会直接返回,效率最高。 innodb为什么不单独存储count(*)的值 这是因为innodb支持事务和mvcc,同一个时刻,存在多个事务,然后每个事务都有插入或者删除操作,那么这个count(*)的值就没有办法维护了。其实我的观点是innodb完全可以将mvcc用于count(*)的值维护,这样...
mysql 得 count得用法
&amp;lt;!-- 筛选统计 --&amp;gt; &amp;lt;select id=&quot;finduserandcount&quot; &amp;gt;        SELECT userName,screenDate,                  COUNT(CASE WHEN SFSH != -1 THEN SFSH END) as all,                 COUNT(CASE WHEN SFSH...
mysql 千万级的 count统计对比
在统计查询的时候尽量使用count(id),不要使用count(*)这样的;特别是数据量特别大的时候。
mysql:Count(*)与Count(1)、Count(2)、Count(‘anything’)及Count(字段)区别
一:Count(*) 、Count(1)、Count(543)或者无论Count(‘anything’) 只要在Count中指定非NULL表达式,结果没有任何区别。因此当你指定Count(*) 或者Count(1)、Count(543)或者无论Count(‘anything’)时结果都会一样,因为这些值都不为NULL。 mysql5.7.23.0中实测: 数据表:     ...
MySQL中count函数使用方法详解
count函数是用来统计表中或数组中记录的一个函数,下面我来介绍在MySQL中count函数用法与性能比较吧。 count(*) 它返回检索行的数目, 不论其是否包含 NULL值。 SELECT 从一个表中检索,而不检索其它的列,并且没有 WHERE子句时, COUNT(*)被优化到最快的返回速度。 例如:SELECT COUNT(*) FROM student; COUNT(
mysql中sum和count的区别
sum()函数和count()函数的区别 其实两者很好容易区分,sum,即求和,多个列相加的和; count计数,一共有多少条数据 sum()函数求累加; 对符合条件的记录的数值列求和; count()函数求个数; 对查询中符合条件的结果(或记录)的个数 数据库中对空值的处理:sum()不计算,count()认为没有此项; 可以使用 IfNull(cloumn,0)对空值处理 sum(...
MySQL的count查询超级慢?我是这么解决的
你可能需要给 Primary Key 加上 Uniqle 约束了 问题描述 数据表结构: Field Type Null Key Default Extra id int(10) unsigned NO PRI NULL auto_increment mid varchar(50) NO UNI ...
MySql查询语句之count函数中distinct的使用
在开发过程中遇到以下场景的sql查询,一个手机号代表一个用户,一个用户可以对车进行多次估价,每次估价在估价记录表中都会被记录,估价之后可以选择是否订阅,如果该用户之前订阅过就会在订阅表中将之前的数据覆盖掉,如果没有订阅过就会重新插入一条数据,所以在估价记录表中一个手机号可能会有多条订阅记录,所以在统计订阅用户数的时候就要根据手机号对其去重,subscribe_yn字段标识用户是否订阅,所以可以用s...
mysql中count的用法
1、 $query="select count(*) as total from User"中 count是什么意思as total是什么意思 count(*) 是计算user表中的记录条数,也就是用户数量,as total只是为了给count(*)起一个别名,为了更好的识别count(*)的意义   2、          这几天用到mysql数据库,对于count(*)用法知
mysql count 与 distinct 混合使用结果不同
distinct 会将所有NULL合并为一项 count(distinct)会将NULL除去。
mysql count 慢的优化(使用二级索引)
发现了mysql innodb count统计特别慢(无论count(1)还是count(*)),总结一下优化 一般采用二级索引去count: 比如:id 是pk aid是secondary index 采用 select count(*) from table where id &amp;amp;gt;=0; 跟 select count(*) from table; 效果是一样的,都是默认使用p...
mysql的count(*)的优化,获取千万级数据表的总行数
一、前言 &amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;这个问题是今天朋友提出来的,关于查询一个1200w的数据表的总行数,用count(*)的速度一直提不上去。找了很多优化方案,最后另辟蹊径,选择了用explain来获取总行数。 二、关于count的优化 &amp;amp;amp;amp;n
mysql中count()统计总结与思考
如果你的需要是统计总行数时,为什么要使用count(*),而避免使用指定具体的列名? count()函数里面的参数是列名的的时候,那么会计算这个字段有值项的次数。也就是,该字段没有值的项并不会进入计算范围(就是网上常说的值为null的项不纳入统计) 很多地方都有类似表述: COUNT ( column ) counts all non-NULL occurences (or should
MySQL sum(),count()组合用法
SELECT SUM(b.clickCount) FROM (  SELECT COUNT(cac.article_id) as clickCount  from   ( SELECT ca.id as articleId, article_title as articleTitle, csu.user_account as userAccount FROM car_articl
查四种不同status的统计数量 以及 MYSQL中count函数的默认返回值问题
 遇到一个问题。在一个表中查四种不同status的记录数。一开始想法是发四条SQL?或者做四个临时表?仔细想想这样不对,效率低下。改用group by status,问题在于页面需要的是四个状态的统计值,只查count(id)等于只知道了value不知道对应key。所以查status以及status的统计值。返回一个List&amp;lt;Map&amp;lt;String,object&amp;gt;&amp;gt;,遍历后用...
mysql之count()函数详解
1.count()函数是用来统计表中记录的一个函数,返回匹配条件的行数。   2.count()语法: (1)count(*)---包括所有列,返回表中的记录数,相当于统计表的行数,在统计结果的时候,不会忽略列值为NULL的记录。 (2)count(1)---忽略所有列,1表示一个固定值,也可以用count(2)、count(3)代替,在统计结果的时候,不会忽略列值为NULL的记录。 (3...
mysql innodb count(*)速度慢的几个解决方案
mysql innodb count(*)速度慢且不准确的解决办法innodb引擎在统计方面和myisam是不同的,Myisam内置了一个计数器,所以在使用 select count(*) from table 的时候,直接可以从计数器中取出数据。而innodb必须全表扫描一次方能得到总的数量。要初步解决这个问题,需要做不同于myisam的一些工作: 1、使用第二索引(一般不使用主键索引),并且添...
mysql的count函数统计错误问题
    使用mysql的时候需要用到count函数,但是发现count函数总是统计不正确。通过查询资料发现,count('任意内容')都会统计出所有记录数,因为count只有在遇见null时不计数,即count(null)==0,因此前者单引号内不管输入什么值都会统计出所有记录数。解决方法就是在条件的后面加上一个 or null 或者通过from后面的where条件进行统计 SELECT co...
MySql的count(*)统计结果很慢?为什么
最近在学习mysql的数据库,发现在innodb表中大数据量下count(*)的统计结果实在是太慢,所以想找个办法替代这种查询,下面分享一下我查找的过程。
mysql中count()函数的用法
数量查询时,有如下几种方式: 1.下面三种方式,在多数情况下效率是基本相同的,但问题在于,很多情况下,我们数据库可能有脏数据,比如重复数据,或者某条数据重要字段是null的,那下面的这几种,会把这种脏数据也统计上,本质都是统计满足条件的行数的: select count(*) from `user` select count(1) from `user` select co...
mysql中count函数的参数值
1、count(*) 查询的是数据表中的所有记录,不论字段是否为NULL,都计算在内; 2、 count(列名) 查询的是数据表中所有不为NULL的记录,不包括字段中为NULL的数据; 3、count(任意数) 查询的是数据表中所有记录,不论字段中是否为NULL,都计算在内; 4、count(布尔值) 查询的是数据表中所有记录,不论字段中是否为NULL,都计算在内,      所以当在括号...
【Mysql】 count() 慢问题
不同引擎中,count(*)有不同的实现方式 MyISAM:把一个表的总行数存在了磁盘,因此在获取行数时候直接返回,效率高。如果加where条件就不能返回这么快。 InnoDB:需要一行行从引擎里面读出来,累计计数,因为事务的支持所以通过MVCC并发控制,读取行数时候据需要一行行的读出来判断。 MySQL优化器会找到最小的那棵树来遍历,在保证逻辑正确的前提下,尽量减少扫描的数据量,是数据库系...
mysql sum() sum(条件表达式) count() count(条件表达式) 总结
    Sum()函数里面的参数是列名的时候,是计算列名的值的相加,而不是有值项的总数。 SUM(条件表达式),如果记录满足条件表达式就加1,统计满足条件的行数   count()函数里面的参数是列名的的时候,那么会计算有值项的次数。 (NULL 不计入, 但是''值计入) COUNT(*)可以计算出行数,包括null COUNT(1)也可以计算出行数,1在这里代表一行  co...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 mysql 培训 mysql的培训