MySQL数据库原理学习(二十二)
2023-02-19 12:23:33 时间
3.5 limit优化
在数据量比较大时,如果进行limit分页查询,在查询时,越往后,分页查询效率越低。
我们一起来看看执行limit分页查询耗时对比:
通过测试我们会看到,越往后,分页查询效率越低,这就是分页查询的问题所在。
因为,当在进行分页查询时,如果执行 limit 2000000,10 ,此时需要MySQL排序前2000010 记录,仅仅返回 2000000 - 2000010 的记录,其他记录丢弃,查询排序的代价非常大 。
优化思路: 一般分页查询时,通过创建 覆盖索引 能够比较好地提高性能,可以通过覆盖索引加子查询形式进行优化。
explain select * from tb_sku t , (select id from tb_sku order by id
limit 2000000,10) a where t.id = a.id;
3.6 count优化
3.6.1 概述
select count(*) from tb_user ;
在之前的测试中,我们发现,如果数据量很大,在执行count操作时,是非常耗时的。
MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个
数,效率很高;但是如果是带条件的count,MyISAM也慢。
InnoDB 引擎就麻烦了,它执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出
来,然后累积计数。
如果说要大幅度提升InnoDB表的count效率,主要的优化思路:自己计数(可以借助于redis这样的数
据库进行,但是如果是带条件的count又比较麻烦了)。
3.6.2 count用法
count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是
NULL,累计值就加 1,否则不加,最后返回累计值。
用法:count(*)、count(主键)、count(字段)、count(数字)
按照效率排序的话,count(字段) < count(主键 id) < count(1) ≈ count(*),所以尽量使用 count(*)。
相关文章
- vivo 全球商城:订单中心架构设计与实践
- 发布会直播技术及业务实践
- vivo 商城架构升级-SSR 实战篇
- vivo 微服务 API 网关架构实践
- SPI 在 Dubbo中 的应用
- Sentinel 是如何做限流的
- 领域驱动设计(DDD)实践之路(四):领域驱动在微服务设计中的应用
- vivo 全球商城:从 0 到 1 代销业务的融合之路
- vivo 全球商城:架构演进之路
- 当我们谈前端性能的时候,我们谈的是什么
- 分布式搜索引擎 Elasticsearch 的架构分析
- 异步编程之事件循环机制
- Seata是什么?一文了解其实现原理
- Canal 组件简介与 vivo 帐号实践
- 源码深度解析 Handler 机制及应用
- 彻底搞懂 IO 底层原理
- 播放器性能优化之路
- vivo商城前端架构升级—多端统一探索、实践与展望篇
- vivo 调用链 Agent 原理及实践
- 分布式集群如何实现高效的数据分布