首页 > 数据库 >mysql大数据量 分页查询优化

mysql大数据量 分页查询优化

时间:2023-09-20 12:44:08浏览次数:41  
标签:20 分页 LIMIT user 数据量 mysql tb id SELECT

最近我老表问我一个面试问题,如果数据量很大,分页查询怎么优化。

个人觉得无非就是sql优化,

那无非就是走索引,

避免回表查询(覆盖索引,也就是不要用select  *  ,走主键索引,叶子节点有保存了数据),

减少回表查询次数(定位到非聚簇索引树的叶子节点少,小表驱动大表等)

我下面自己测了一个500万数据,取偏移量400万20条数据的例子 ,话不多说 上例子

表tb_user

CREATE TABLE `tb_user` (
  `user_id` bigint NOT NULL COMMENT '用户id',
  `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户'

 500万数据

正常的sql

SELECT * FROM `tb_user` LIMIT 4000000, 20;    
EXPLAIN SELECT * FROM `tb_user` LIMIT 4000000, 20; //执行计划 看了全表扫描

 

 优化后的sql,由于我的是long类型的主键id所以我需要找到主键。

像那些直接是递增的主键id可以直接where user_id > 偏移量,但是是要表数据没被删过

SELECT * FROM tb_user WHERE user_id > (SELECT user_id FROM tb_user LIMIT 3999999,1 ) LIMIT 20;
EXPLAIN SELECT * FROM tb_user WHERE user_id > (SELECT user_id FROM tb_user LIMIT 3999999,1 ) LIMIT 20;

 

 可以看到快了0.3秒。

 总之,就是sql优化的问题。

 

我的CSDN

标签:20,分页,LIMIT,user,数据量,mysql,tb,id,SELECT
From: https://www.cnblogs.com/yblue/p/17717018.html

相关文章

  • ubuntu 下mysql的常用命令
    MySQL数据库的基本操作命令=========================一、mysql服务操作0、查看数据库版本sql->status;1、netstartmysql//启动mysql服务2、netstopmysql//停止mysql服务3、mysql-h主机地址-u用户名-p用户密码//进入mysql数据库4、quit//......
  • 功能强大的PostgreSQL没有MySQL流行的10个原因
    以下内容是根据玖章算术CEO叶正盛在「3306π数据库朋友圈」技术演讲整理。文末附完整的PPT下载链接!MySQL与PostgreSQL都是非常优秀并且非常成功的数据库,PostgreSQL的功能比MySQL强大,但是依然没有MySQL流行,作者从产品功能、技术架构、生态、品牌商业几方面来分析原因。影响......
  • mysql数据库数据的基本查询操作
    基本查询语句:select[all|distinct]字段或表达式列表[from子句][where子句][groupby子句][having子句][orderby子句][limit子句];表达式列表中的条件语句顺序不能乱,from:数据来源,表示数据来源于哪张表,例句:select*fromstudent(student是表名);where:条件字句,可连接运算符,结......
  • MySQL篇:第九章_详解流程控制结构
    流程控制结构系统变量一、全局变量作用域:针对于所有会话(连接)有效,但不能跨重启查看所有全局变量SHOWGLOBALVARIABLES;查看满足条件的部分系统变量SHOWGLOBALVARIABLESLIKE'%char%';查看指定的系统变量的值SELECT@@global.autocommit;为某个系统变量赋值SET@@glo......
  • 【Python】pymysql 连接mysql数据库, 执行数据库语句
    1.数据库设置importpymysql#数据库连接配置DB_HOST='127.0.0.1'#ipDB_PORT=3306#端口DB_USER='root'#用户名DB_PASSWD='root'#密码DB_DATABASE='db_1'#数据库名称2.数据库连接#连接数据库conn=pymysql.connect(host=DB_HOS......
  • MySQL常规优化操作
    查询SQL语句执行频率查询mysql服务启动时长SHOWSTATUSLIKE'uptime';下列输出表示服务启动了276324秒+---------------+--------+|Variable_name|Value|+---------------+--------+|Uptime|276324|+---------------+--------+查询全局SQL执行的频......
  • MySQL高级11-后台进程
    一、前言MySQL的服务实现通过后台多个线程、内存池、文件交互来实现对外服务的,不同线程实现不同的资源操作,各个线程相互协助,共同来完成数据库的服务。MySQL常用的后台线程概括如下,分为MasterThread,IOThread,PurgeThread,PageCleanerThread二、MasterThread在MySQL......
  • Vue+Node连接MySql搭建项目
    https://haoying.blog.csdn.net/article/details/123660641?spm=1001.2014.3001.5506https://www.jb51.net/article/277499.htm ......
  • mysql数据脱敏
    MySQL数据脱敏是一种技术手段,用于将敏感数据转换为非敏感形式,以保护数据隐私和安全。以下是一些常见的MySQL数据脱敏方法:替换:将敏感数据中的特定字段或字符串替换为非敏感的字符串。例如,将姓名中的姓氏和/或名字替换为星号(*)。扰动:在敏感数据中添加噪声或扰动,使其难以识别。这种方......
  • MySQL 表分区使用实践
    在使用MySQL8.0表分区时,需要注意以下一些关键事项和最佳实践:支持的存储引擎:MySQL8.0表分区仅支持一些特定的存储引擎,如InnoDB和NDB(NDB是MySQLCluster存储引擎)。因此,在选择分区时,请确保你的表使用的是支持分区的存储引擎。分区键的选择:选择适当的分区键非常重要。......