加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

如何处理mysql中count查询速度很慢的问题

发布时间:2022-03-04 12:30:56 所属栏目:编程 来源:互联网
导读:这篇文章主要介绍了如何解决mysql中count查询速度很慢的问题,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。 MySQL 大表的count()优化 以下讨论基于mysql5.7 InnoDB存储引擎. x86 windows操
       这篇文章主要介绍了如何解决mysql中count查询速度很慢的问题,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。
 
       MySQL 大表的count()优化
       以下讨论基于mysql5.7 InnoDB存储引擎. x86 windows操作系统。
 
      首先是关于mysql的count(*),count(PK), count(1)哪个快的问题。
 
      并没有什么区别!加上了WHERE子句之后3个查询的时间也是相同的,我就不贴图片了。
 
之前在公司的时候就写过一个select count(*) from table的SQL语句,在数据多的时候非常慢。所以要怎么优化呢?
 
这要从InnoDB的索引说起, InnoDB的索引是B+Tree。
 
对主键索引来说:它只有在叶子节点上存储数据,它的key是主键,并且value为整条数据。
对辅助索引来说:key为建索引的列,value为主键。
 
这给我们两个信息:
1. 根据主键会查到整条数据
2. 根据辅助索引只能查到主键,然后必须通过主键再查到剩余信息。
 
所以如果要优化count(*)操作的话,我们需要找一个短小的列,为它建立辅助索引。
在我的例子中就是status,虽然它的”severelity”几乎为0.
 
可以看到,时间为0.422s,也很快,但是比起status这列还是有着1.5倍左右的差距。
 
再大胆一点做个实验,我把status这列的索引删掉,建立一个status和left(omdb,200)(这一列平均1000个字符)的联合索引,然后看查询时间。
建立索引: alter table test1 add index (status,omdb(200))
 
索引失效有很多种情况,比如使用函数,!=操作等,具体请参考官方文档。
 
对MySQL没有很深的研究,以上是基于我结合B+树的数据结构和对实验结果的推测作出的判断,如果有不足之处,欢迎大家指正。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读