mysql对大表千万级如何优化(MySQL 大表的count优化实现)
mysql对大表千万级如何优化
MySQL 大表的count优化实现以下是基于我结合b+树的数据结构和对实验结果的推测作出的判断,如有错误,恳请指正!
今天实验了一下mysql的count()操作优化, 以下讨论基于mysql5.7 innodb存储引擎. x86 windows操作系统。
创建的表的结构如下(数据量为100万):
首先是关于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.
先建立索引:alter table test1 add index (
status);
然后查询,如下图:
可以看到,查询时间从3.35s下降到了0.26s,查询速度提升近13倍。
如果索引是str
这一列,结果又会是怎么样呢?
先建立索引: alter table test1 add index (str)
结果如下:
可以看到,时间为0.422s,也很快,但是比起status
这列还是有着1.5倍左右的差距。
再大胆一点做个实验,我把status
这列的索引删掉,建立一个status
和left(omdb,200)
(这一列平均1000个字符)的联合索引,然后看查询时间。
建立索引: alter table test1 add index (
status,omdb(200))
结果如下:
时间为1.172s
|
alter table test1 add index (status,imdbid); |
补充!!
要注意索引失效的情况!
建立了索引后正常的的样子:
可以看到key_len为6, extra的说明是using index.
而如果索引失效的话:
索引失效有很多种情况,比如使用函数,!=操作等,具体请参考官方文档。
对mysql没有很深的研究,以上是基于我结合b+树的数据结构和对实验结果的推测作出的判断,如有错误,恳请指正!
到此这篇关于mysql 大表的count()优化实现的文章就介绍到这了,更多相关mysql 大表count()优化内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
原文链接:https://blog.csdn.net/u012674931/article/details/52711137
- mysql的默认数据库例子在哪里(修改MySQL8.0 默认的数据目录快捷操作无配置)
- mysql获取当前日期时间(MySQL DATEDIFF函数获取两个日期的时间间隔的方法)
- 查看mysql索引缓存(MySQL查询缓存的小知识)
- Mysql官方性能测试工具mysqlslap的使用简介(Mysql官方性能测试工具mysqlslap的使用简介)
- mysql8.0详解(MySQL 8.0 的 5 个新特性,太实用了!)
- mysqldump导入导出(MySQL官方导出工具mysqlpump的使用)
- mysqlinnodb锁使用教程(MySQL Innodb关键特性之插入缓冲insert buffer)
- mysqltruncate(MYSQL中Truncate的用法详解)
- 怎么运行xampp中的mysql(本地安装了mysql导致xampp的mysql服务启动失败)
- mysql中查询数据合并(Mysql合并结果接横向拼接字段的实现步骤)
- mysql实验总结分析(MySQL查询截取的深入分析)
- mysql改root密码命令(MySQL root密码的重置方法)
- mysql的视图和临时表区别(MySQL 内存表和临时表的用法详解)
- mac的mysql连接问题如何解决(MAC 中mysql密码忘记解决办法)
- mysql数据库与表的基本操作总结(Mysql、Oracle中常用的多表修改语句总结)
- mysql5.7详细安装教程(MySQL5.7.33安装过程图文详解)
- 郭麒麟(郭麒麟)
- 古人十句 戒骄 名言,醍醐灌顶,受益匪浅(古人十句戒骄名言)
- 《道德经》:功成不局,泰而不骄(道德经:功成不局)
- 每日一典 过江之鲫(每日一典过江之鲫)
- 红色代表什么(红色代表什么意义和象征)
- 菲律宾安全吗(菲律宾安全吗2023)
热门推荐
- python使用教程操作(详解python中@的用法)
- 编写HTML格式的邮件需注意的地方
- navicat怎么和mysql连接(Navicat Premium远程连接MySQL数据库的方法)
- vue实现聊天(Vue+ssh框架实现在线聊天)
- pandas怎么抽出重复数据(pandas去除重复列的实现方法)
- 香港云服务器(香港云服务器的优势是什么?)
- js 图片编辑处理库(javascript input图片上传及预览,FileReader预览图片)
- javascript将字符串转换成数组(如何将JavaScript将数组转为树形结构)
- sqlserver数字格式化五位小数(详细分析sqlserver中的小数类型float和decimal)
- 查看SQL SERVER指定数据库中所有的触发器
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9