首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql大量数据分页查询优化-延迟关联

所有的php初学者都应该知道,mysql的分页语句写法如下: select * from a limit (page-1)*page_size,page_size 而当这语句分页到一定程度时,例如1000...页,每页20条 select * from a limit 19980,20 会发现分页之后查询的会越来越慢 原因是因为limit a,b 的取数据方式是,先取出a+b条数据,再把a条筛选掉,剩b条...,相当于一次性要取a+b条的数据,而a条其实是无用的 解决方案如下 一:php代码解决 例如我们先查询出第一页的数据: select * from a limit 20 保留最后一个的id,当需要取第2...,不做优化,当到101页时采用该优化方案,并且不让用户从101页进行页面跳转到1xx页 二:mysql解决 SELECT *         FROM a         inner join(          ...普通方法查询,0.123秒 上一页最后一个的id为20000,则 ?  php方法查询,0.070秒 ? mysql索引覆盖查询,0.089秒

2.5K20

mysql longtext 查询_mysql中longtext存在大量数据时,会导致查询很慢?

一个表,1.5w条数据,字段: id,name,content,last_update_time id,自定义主键 name,varchar类型 content是longtext类型, last_update_time...case1: select id, name from t order by last_update_time limit 10000, 10 当content当中有大量的文本时,case1的效率极慢。...使用explain: 有content时结果: mysql> explain select id, name, last_update_time from t order by last_update_time...无content的时候,查询走的是idx_last_update_time,我猜测这个索引中包含了id,name字段,因此仅通过索引就可以获取到所需的数据,因此速度很快。...我觉得,主要跟你的分页查询的方式有关,limit 10000,10 这个意思是扫描满足条件的10010条数据,扔掉前面的10000行,返回最后的10行,在加上你的表中有个,非常大的字段,这样必然增加数据查询

3.9K20
您找到你想要的搜索结果了吗?
是的
没有找到

每日一面 - mysql 大表批量删除大量数据

问题参考自:https://www.zhihu.com/question/440066129/answer/1685329456 ,mysql中,一张表里有3亿数据,未分表,其中一个字段是企业类型,企业类型是一般企业和个体户...答案为个人原创 假设表的引擎是 Innodb, MySQL 5.7+ 删除一条记录,首先锁住这条记录,数据原有的被废弃,记录头发生变化,主要是打上了删除标记。...也就是原有的数据 deleted_flag 变成 1,代表数据删除。但是数据没有被清空,在新一行数据大小小于这一行的时候,可能会占用这一行。这样其实就是存储碎片。...如果 delete 的数据大量数据,则会: 如果不加 limit 则会由于需要更新大量数据,从而索引失效变成全扫描导致锁表,同时由于修改大量的索引,产生大量的日志,导致这个更新会有很长时间,锁表锁很长时间...由于产生了大量 binlog 导致主从同步压力变大 由于标记删除产生了大量的存储碎片。由于 MySQL 是按页加载数据,这些存储碎片不仅大量增加了随机读取的次数,并且让页命中率降低,导致页交换增多。

1.8K20

mysql大量数据分页优化

address VARCHAR ( 20 ) NOT NULL, PRIMARY KEY ( id ) ) ENGINE = MyISAM; 写一个批量插入的存储过程 delimiter // # 删除数据...TRUNCATE TABLE t; # 如果已经有sp_test_batch存储过程,将其删除,后面重新创建 DROP PROCEDURE IF EXISTS sp_test_batch; # 创建存储过程...batch_count = @batch_count+1; END WHILE; SET @count = @count + @batch_count; # 拼接SQL语句执行...这还只是1000w数据,如果我们上亿数据呢,可想而知这时候查询的效率有多差。下面我们来进行优化。 4 .进行优化 子查询的分页方式: ? ?...join的方式比子查询性能在稍微好点。 终极优化: 这个时间性能是最好的。这种优化必须要依赖前一次的查询的最大ID,如果是那种分页直接可以指定多少页的是不行的,必须是只能后一页,后一页这么点击。

2.4K20

MySQL 快速删除大量数据(千万级别)的几种实践方案——附源码

(1秒左右)的速度删除770多万条数据,单张表总数据量在4600万上下,优化过程的方案层层递进,详细记录如下: 批量删除(每次限定一定数量),然后循环删除直到全部数据删除完毕;同时key_buffer_size...直接的delete后,mysql会合并索引块,涉及大量内存的拷贝移动;而OPTIMIZE TABLE直接重建索引,即直接把数据块情况,再重新搞一份(联想JVM垃圾回收算法)。...50,建议拷贝所需数据到临时表,然后删除原表,再重命名临时表为原表,附MySQL如下: INSERT INTO New SELECT * FROM Main WHERE...,而不会删除相应的数据 参考: 1)https://dev.mysql.com/doc/refman/5.7/en/alter-table-partition-operations.html 具体分区说明...2)http://mysql.rjweb.org/doc.php/deletebig#solutions  删除数据的解决方案   本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明

6.6K21

mybatis 数据权限插件_mybatis查询大量数据

数据权限管理中心 由于公司大部分项目都是使用mybatis,也是使用mybatis的拦截器进行分页处理,所以技术上也直接选择从拦截器入手 需求场景 第一种场景:行级数据处理 原sql: select...* from ( select id,username,region from sys_user ) where 1=1 and region like “3210%"; 解释 用户只能查询当前所属市以及下属地市数据...permission.client.userid.method"); //当前登录人 String userId = (String)ReflectUtil.reflectByPath(userMethodPath); //如果用户为 1 则只能查询第一条...传递动态参数 比如用户A只能查询自己单位以及下属单位的所有数据; 配置中心配置的where部分的sql如下: org_cd like concat(${orgCd},'%') 然后通过PrepareInterceptor.java...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除

86620

MySQL学习笔记】添加数据查询数据、修改数据删除数据

哈喽大家好~ 这里是MYSQL数据库原理学习笔记专栏第三期 本期内容——添加数据查询数据、修改数据删除数据 上期内容——数据库/数据表的创建、查看、选择与修改 第一期内容——数据库基础知识...简单条件查询数据 修改数据 删除数据 总结 ---- 前言 要想操作数据表中的数据,首先要保证数据表中存在数据,本期学习内容是数据操作。...接下来,和小编一起开启学习之旅吧~ ---- 添加数据 MySQL中用insert语句向数据表中添加数据,根据操作的不同目的一般分为两种,一种是为所有字段添加数据,一种格式为部分字段添加数据。...在MySQL中,如果创建的数据表未指定字符集,则数据表及表中的字段将使用默认的字符集latin1,此时插入中文字符,则会报错。...删除数据 删除数据是对表中存在的记录进行删除MySQL中使用delete语句进行删除,语法如下: delete from 数据表名 where 条件表达式; 数据表名:指定要执行删除操作的表;

1.6K40

①【数据库操作】 MySQL数据库的查询、创建、删除、使用。

MySQL数据库的SQL语句不区分大小写,关键字建议大写。...④注释: -- 单行注释(两条横杠 + 一个空格) #MySQL特有单行注释(一个井号) /* 多行注释 */ SQL分类 : ①DDL:数据定义语言,用来定义数据库对象(数据库,表,字段) ②DML:...特点: ①使用表存储数据,格式统一,便于维护 ②使用SQL语言操作,标准统一,使用方便 数据库的查询、创建、删除、使用。...DDL - 操作数据库: 查询数据库 ①查询所有数据库 SHOW DATABASES; ②查询当前数据库 SELECT DATABASE(); 创建数据库 CREATE DATABASE [IF NOT...,不会再创建,也不会报错 -- 只有数据库不存在时才会进行创建 CREATE DATABASE IF NOT EXISTS `SQLstudy`; -- 创建数据库,指定默认字符集为utf8mb4

28720

MySQL 查询数据

MySQL 数据库使用SQL SELECT语句来查询数据。 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过 Python来查询数据。...语法 以下为在MySQL数据库中查询数据通用的 SELECT 语法: SELECT column_name,column_name FROM table_name[WHERE Clause][LIMIT...N][ OFFSET M] 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,使用WHERE语句来设定查询条件。...---- 通过命令提示符获取数据 以下实例我们将通过 SQL SELECT 命令来获取 MySQL 数据表 runoob_tbl 的数据: 实例 以下实例将返回数据表 runoob_tbl 的所有记录:...注:小编已经抓取所有盗墓笔记的章节目录与链接,储存在学习使用的远程mysql数据库中,如需使用远程数据库或者单独创建个人使用的数据库请后台联系小编或者后台回复mysql 抓取的数据存储在dmbj的dmbj

6.7K60

安全快速地删除 MySQL 大表数据释放空间

一、需求 按业务逻辑删除大量数据 操作不卡库,不能影响正常业务操作 操作不能造成 60 秒以上的复制延迟 满足以上条件的前提下,尽快删除数据释放所占空间         表结构如下: create...,只保留 2023-10-01 以后的数据(约占总量的 1/10),其它删除。...导出需要删除数据的主键到文件 -- 在从库执行查询 select userid, avid into outfile '/data/del.txt' from space_visit_av where...bin/bash source ~/.bashrc dir="/data/" ls $dir | while read line do     file=${dir}${line}     # 表关联删除数据...使用 pt-online-schema-change 释放删除数据所占空间 # 后台执行 nohup ~/shrink.sh > ~/shrink.log 2>&1 &         shrink.sh

30310

②【MySQL表操作】 数据库表的创建、查询、修改、删除

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 数据库表的创建、查询、...修改、删除 1....MEDIUMBLOB:二进制形式的中等长度文本数据 MEDIUMTEXT:中等长度文本数据 LONGBLOB:二进制形式的极大文本数据 LONGTEXT:极大文本数据 日期类型: DATE:日期值(YYYY-MM-DD...DDL - 表操作 DDL-表操作: 查询表信息 ①查询当前数据库所有表 SHOW TABLES; ②查询表结构 DESC 表名; ③查询指定表的建表语句 SHOW CREATE TABLE 表名; 创建表操作...TABLE 表名 RENAME TO 新表名; 删除表操作: ①删除表 DROP TABLE [IF EXISTS] 表名; -- 演示 -- 删除名为aaa的表 -- 执行时,如果aaa表不存在,

45850
领券