mysql 大数据分页查询优化
应用场景;
当有一张表的数据非常大,需要使用到分页查询,分页查询在100w条后查询效率非常低;
解决方案:
1、业务层解决:只允许用户翻页一百页以内,十条一页;
2、使用where id > 5000000 limit 10; 要求数据完整性;但可以考虑每次查询时得知已查的最后一条id。
3、延迟查询:select table.id,table.name left join (select id from table limit 5000000,10) as tmp on table.id = tmp.id;id为索引;先通过索引查处500w条后的id,速度贼快。然后通过索引id来查询出对应的每一条数据;数独也贼快;但通过关联表在海量数据中查询会消耗一些时间;但比之前是提升了一倍多的数度;
开启慢查询日志:
在mysql中代码改配置:
开启慢查询日志:查询目前状态 show variables like '%query%';修改两个配置:set global slow_query_log = on; set session long_query_time = 2; slow_query_log_file配置缓存日志的路径
日志一条数据
# Time: ::
# User@Host: root[root] @ localhost [] Id:
# Query_time: 9.141422 Lock_time: 0.000117 Rows_sent: Rows_examined:
SET timestamp=;
select * from jacky order by sid,score limit ;
查看一条语句执行效率
开启:set profiling = 1;
查询:show profiles;
查看某条详情:show profile for query num
variables中保存了所有mysql的系统配置; 可以通过show variables like "%xxx%';查询
show variables like '%query%'; #查看关于query的配置
show variables like 'version'; #查看mysql版本
explain 分析sql语句
explain select * from ......
+----+-------------+-------+-------+---------------+----------+---------+------+--------+-----------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+----------+---------+------+--------+-----------------------+
| | SIMPLE | jacky | range | sid_type | sid_type | | NULL | | Using index condition |
+----+-------------+-------+-------+---------------+----------+---------+------+--------+-----------------------+
select_type : simple
tables : 表名
type : 这列比较重要;表示使用了哪种类型;有没有使用索引;从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL
possible_keys : 提示使用哪个索引会在该表中找到行,不太重要
keys : MYSQL使用的索引,简单且重要
key_len : MYSQL使用的索引长度
ref : ref列显示使用哪个列或常数与key一起从表中选择行。没明白
rows : 比较重要;表示该查询所遍历的行数;越小越好;
Extra : 该列包含MySQL解决查询的详细信息。一次条件查询中改参数为:User where
尽量注意:type、rows、keys、extra这几个参数;
mysql 大数据分页查询优化的更多相关文章
- MySQL大数据分页的优化思路和索引延迟关联
之前上次在部门的分享会上,听了关于MySQL大数据的分页,即怎样使用limit offset,N来进行大数据的分页,现在做一个记录: 首先我们知道,limit offset,N的时候,MySQL的查询 ...
- mysql 大数据分页优化
一.mysql大数据量使用limit分页,随着页码的增大,查询效率越低下. 1. 直接用limit start, count分页语句, 也是我程序中用的方法: select * from prod ...
- Mysql大数据量查询优化
一般MYSQL最基本的分页方式: select * from content order by id desc limit 0, 10 在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就 ...
- mysql大量数据分页查询优化-延迟关联
所有的php初学者都应该知道,mysql的分页语句写法如下: 1 select * from a limit (page-1)*page_size,page_size 而当这语句分页到一定程度时,例如 ...
- 关于MySQL大量数据分页查询优化
select * form user id in(select id from user limit 1000000,10);
- MySQL大数据量分页查询
mysql大数据量使用limit分页,随着页码的增大,查询效率越低下. 测试实验 1. 直接用limit start, count分页语句, 也是我程序中用的方法: select * from p ...
- 【1】MySQL大数据量分页查询方法及其优化
---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适应场景: 适用于数据量较少的情况(元组百/千 ...
- mysql大数据量下的分页
mysql大数据量使用limit分页,随着页码的增大,查询效率越低下. 测试实验 1. 直接用limit start, count分页语句, 也是我程序中用的方法: select * from p ...
- MySQL大数据量分页查询方法及其优化
MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适 ...
随机推荐
- ACM-ICPC 2017 Asia Xi'an J LOL 【暴力 && 排列组合】
任意门:https://nanti.jisuanke.com/t/20750 J - LOL 5 friends play LOL together . Every one should BAN on ...
- Spring 的AOP底层实现技术:JDK和CGLIB动态代理
Spring 的AOP实现技术之JDK的动态代理技术实例: 接口:IUserService (Spring的AOP是动态AOP,实现技术:JDK提供的动态代理和cglib代理,cglib它可以为没有实 ...
- 使用maven创建项目
http://192.168.4.112/rdmanager/main/index.jhtml 1.对于第一次下载某个项目的源码,按照下面的步骤进行: (1)在D:\projects\目录下的空白位置 ...
- vue案列
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Android学习笔记_20_访问应用权限汇总
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com. ...
- AngularJS web应用程序
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- 缓存&跨域
一.前端本地缓存的几种实现方式了解一下 缓存的几种实现方式 序号 名称 参考资料 1 serviceWorker https://blog.csdn.net/ztguang/article/deta ...
- 《深入理解Spring Cloud与微服务构建》书籍目录
转载请标明出处: https://blog.csdn.net/forezp/article/details/79735542 本文出自方志朋的博客 作者简介 方志朋,毕业于武汉理工大学,CSDN博客专 ...
- iOS之UIKeyboardType 11种键盘图片展示
UIKeyboardTypeDefault UIKeyboardTypeASCIICapable == UIKeyboardTypeAlphabet UIKeyboardTyp ...
- mac 开启mysql日志
step1: 进入终端进入mysql: step2 : 开启mysql日志 step3 : 查看mysql的日志文件所在位置 step4 : 在终端中用tail -f 命令打开该日志文件: