mysql根据where条件查询count(*)速度很慢(接近1千万的数据),怎么提升速度?

润群 发布于 2017/02/06 16:09
阅读 3K+
收藏 0

表的数据接近1000万。

表结构使用了表分区的方式,共分了6个区。

页面的数据显示使用了分页,查询语句select count(*) 执行十分慢要40秒左右~~~

但是limit查询数据2秒左右就可以了,有什么方案优化一下count语句吗?

加载中
0
Eric_林
Eric_林

用explain分析啊,看看这个结果才能看出些东西,从上面你的描述我是看不出来问题在哪

润群
润群
用explain看结果也是使用了索引哦
0
mickelfeng
mickelfeng

1、用的myisam还是innodb,myisam的查询速度明显比innodb快很多。

2、能不加where条件的尽量不加。

3、索引优化

润群
润群
这个表还要涉及事务(坑啊~
0
雨翔河
雨翔河

40秒?我擦,这是变态的久了吧。估计后面的条件巨复杂。

0
宇润
宇润

好像说count是全表查的,如果是不加条件的想要查表记录数量,有一个语句可以查

select TABLE_ROWS from information_schema.`TABLES` WHERE TABLE_NAME = '表名'

 

润群
润群
回复 @宇润 : 现在方案是从业务上进行了优化,只能查询指定时间内的数据了。
宇润
宇润
回复 @润群 : 大数据量下带条件的count肯定不现实。。如果是分页,建议只允许查前XX页
润群
润群
这不现实啊,业务上肯定带有where的。。
0
xinson
xinson

select count(ID)  from  new where 1;   

count()使用主键

0
头号大宝贝
头号大宝贝

count(1) 只扫主键。

count(*) 扫描全表。 

返回顶部
顶部