【MySQL】mysql百万级数据表翻页查询特别慢的优化方式
CrazyPanda发表于:2024-11-14 10:21:31浏览:246次
最近遇到了mysql百万级数据表翻页查询特别慢的问题
查询第一页的时候,特别快:
而当数据达到百万级以上时,翻页查询就会特别慢
翻页查询直接达到了65秒。
从网上了解到优化的几种方式:
1. 索引优化:对查询频率高的字段建立索引,可以大幅提高查询速度。特别是对于用于排序和分页的字段,确保它们有适当的索引。
2. 分区表:将大表按照某个字段分成多个分区,可以提高查询效率,尤其是在查询时只搜索特定的分区。
3. 数据库垂直拆分:将一个大表按照某个字段拆成多个小表,减少单个表的数据量,从而提高查询速度。
4. 数据库水平拆分:将一个大表按照某个字段拆成多个相同结构的小表,可以将数据均匀地分配到多个服务器中,提高查询速度。
5. 优化查询语句:尽量避免使用子查询、不必要的JOIN等操作,减少查询的复杂度,从而提高查询速度。
6. 使用缓存:将热点数据或者计算结果缓存起来,减少对数据库的查询次数。
7. 数据库连接池:使用数据库连接池可以减少频繁创建和关闭连接所消耗的资源。
8. 升级硬件和软件:提高服务器的硬件配置,如内存、CPU、磁盘等,或者升级到更高版本的MySQL。
9. 优化LIMIT子句:避免使用大的偏移量(如LIMIT 100000, 100),因为这会导致MySQL扫描大量不必要的行。可以考虑使用基于主键的范围查询来替代。
10. 避免SELECT *:只选择需要的列,避免不必要的数据传输和处理。
最后解决方案,将翻页跳转按钮去掉,改换成上一页,下一页,按照最大最小id进行取值翻页查询,速度会快很多。
查询sql改成下面的样子,速度会快很多。
猜你喜欢
- 【MySql】索引怎么提高查询的速度?
- 文章目录索引:怎么提高查询的速度?如何创建组合索引?组合索引的原理如何创建单字段索引?单字段索引的作用如何选择索引字段?索引是什么?单字段索引组合索引总结索引索引相关面试题MySQL索引的底层实现索引创建原则索引优缺点索引失效场景索引:怎么提高查询的速度?在超市信息系统刚刚开始运营的时候,因为数据量很少,每一次的查询都能很快拿到结果。但是,系统运转时间长了以后,数据量不断地累积,变得越来越庞大,很多查询的速度就变得特别慢。这个时候,我们就采用了 MySQL 提供的高效访问数据的方法—— 索引,有
- 【MySQL】MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁
- 一、视图#视图是一个虚拟表(非真实存在的),其本质是‘根据SQL语句获取动态的数据集,并为其命名‘ ,用户使用时只需使用“名称”即可获取结果集,可以将该结果集当做表来使用。使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的SQL了,直接去视图中查找即可,但视图有明显的效率问题,并且视图是存放在数据库中的,如果我们程序中使用的SQL过分依赖数据库中的视图,即强耦合,那就意味着扩展SQL极为不便,因此并不推荐使用视图有如下的特点: &
- 【MySQL】一文带你了解数据库约束
- 文章目录1. 约束类型2.PRIMARY KEY:主键约束3.FOREIGN KEY:外键约束4.NOT NULL:非空约束5.UNIQUE:唯一约束5.DEFAULT:默认值约束6.总结1. 约束类型作用: 数据库约束是用于限制数据输入或数据更新的规则。数据库约束确保在表中只能插入符合规则的数据,以确保数据的完整性和一致性。 常见的数据库约束包括:主键约束:用于唯一标识表中的每一行数据,确保数据唯一性和完整性。外键约束:用于确保表之间数据的关系
- 【MySql】怎么利用聚合函数实现高效地分组统计?
- 文章目录聚合函数:怎么高效地进行分组统计?sum( )avg( ) & max( ) & min( )count( )聚合函数:怎么高效地进行分组统计?MySQL中有5种聚合函数较为常用,分别是求和函数sum(), 求平均函数avg(), 最大值函数max(), 最小值函数min()和计数函数count()。在超市项目中有一个需求是这样的:经营者提出,他们需要统计一个门店,每天、每个单品的销售情况,包括销售数量和销售金额等。这里涉及3个数据表,具体信息如下所示:销售明细表demo
- 【MySql】mysql 将数据库中的所有表结构和数据 导入到另一个库(亲测有效)
- 一、问题描述在本地开发一个功能,需要结合具体数据测试代码是否正确,但服务器上的数据不可随便修改。此时则需要将服务器上某个数据库的表批量导入到本地、而后进行测试。将数据库db1中的所有表及数据(如table1、table2),批量导入到另一个数据库db2中。二、解决方案刚开始自己一直尝试用DataGrip、Navicat的sql/csv格式导入导出,总有错误或者遗漏,比如报错中止、50张表却只导入32张等,可能是操作方式有误或者数据格式有问题。也试过用sql语句,但仍失败。经查阅资料、尝试多次,终
- 【MSQL】MATCH() AGAINST()全文搜索
- 这个问题是关于MySQL的全文搜索查询。MATCH() AGAINST() 是MySQL全文搜索的一部分。问题中的代码是在查询中使用MATCH() AGAINST(),但是使用方式有一些问题。首先,MATCH() 函数的参数应该是一个字段名,而不是一个字段值。其次,AGAINST 子句后面应该是要搜索的字符串,并且这个字符串需要被单引号包围。在布尔全文搜索模式下,你需要使用一些特殊的操作符来表示搜索的重要性或条件。例如,+表示一个词必须存在,而 - 表示一个词必须不存在。SELECT
- 【MySql】mysql查询死锁
- 在MySQL数据库中,死锁是一个常见的问题,它发生在多个事务互相等待对方释放锁时。当一个事务试图修改已被另一个事务锁定的数据时,就会发生死锁。解决死锁的策略包括预防和检测。以下是一些处理MySQL死锁的方法:
- 【MySQL】MySQL中的json操作
- 引言Mysql5.7版本以后提供了一个原生的Json类型,Json值将不再以字符串的形式存储,而是采用一种允许快速读取文本元素(document elements)的内部二进制(internal binary)格式。 在Json列插入或者更新的时候将会自动验证Json文本,未通过验证的文本将产生一个错误信息。 Json文本采用标准的创建方式,可以使用大多数的比较操作符进行比较操作,例如:=, <, <=, >, >=, <>, != 和 <=>。
栏目分类全部>
推荐文章
- 【行业动态】TIOBE4月榜单发布:C/C++深受内存安全影响、PHP辉煌不再!
- 【MySQL】MySQL索引原理与慢查询优化
- 【PHP】PHP8中如何使用Stringable Interface更方便地处理字符串操作
- 【UniApp】利用uniapp实现图表展示功能
- 【PHP】制作自己的Composer插件并与其他开发者共享
- 【MySql】批量替换数据表中某字段的值
- 【UniApp】利用uniapp实现图标动画效果
- 【Vue】Antd Pro Vue的使用(五)—— 多文件上传回显问题
- 【C#】Winform NanUI 0.77版本 清除Cookie等本地缓存
- 【PHP】ThinkPHP 集成 jwt 技术 token 验证