复盘MySQL分页查询优化方案】的更多相关文章

一.前言 MySQL分页查询作为Java面试的一道高频面试题,这里有必要实践一下,毕竟实践出真知. 很多同学在做测试时苦于没有海量数据,官方其实是有一套测试库的. 二.模拟数据 这里模拟数据分2种情况导入,如果只是需要数据测试下,那么推荐官方数据.如果官方数据满足不了需求的话,那么我们自己模拟数据. 1. 导入官方测试库 下载 官方数据库文件 或者在 github 上下载. 该测试库含有6个表. 首先进入 employees_db, 执行导入数据指令 mysql -uroot -proot -t…
前言 当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询.对于数据库分页查询,也有很多种方法和优化的点.下面简单说一下我知道的一些方法.     准备工作 为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明. 表名:order_history 描述:某个业务的订单历史表 主要字段:unsigned int id,tinyint(4) int type 字段情况:该表一共37个字段,不包含text等大型数据,最大…
由于MySql的分页机制:并不是跳过 offset 行,而是取 offset + N 行,然后返回放弃前 offset 行,返回N 行, 所以当 offset 特别大的时候,效率就非常的低下,要么控制返回的总页数,要么对超过特定阈值的页数进行 SQL 改写. 改写例子如下:首先快速定位到offset对应的id,之后进行关联查询,如下: SELECT a.* FROM 表 1 a, (select id from 表 1 where 条件 LIMIT 100000,20 ) b where a.i…
对于web后台报表导出是一种常见的功能点,实际对应服务后端即数据库的排序分页查询.如下示例为公司商户积分报表导出其中一个sql ,当大批量的导出请求进入时候,mysql的cpu急剧上升瞬间有拖垮库的风险. SELECT * FROM coupons.cp_score_log WHERE `m_shopid` ORDER BY add_time DESC LIMIT , ; 报表导出功能存在几个问题: 1.时间跨度太大,数据量剧增.(可以结合业务需求,限制一定时间范围,比如只能导出3个月以内数据)…
有时在处理偏移量非常大的分页时候查询时,例如LIMIT 1000,10这样的查询,这时MySQL需要查询1010条记录然后只返回最后10条,前面1000条记录都被抛弃,这样的代价非常高.要优化这种查询,要么在页面中限制分页的数量,要么是优化大偏移量的性能. 优化此类分页查询的一个最简单的办法就是尽可能地使用索引覆盖查询,而不是查询所有的列.然后根据需要做一个关联操作再返回所需的列.如下 SELECT id, name, source, desc FROM alert ORDER BY name…
目录 1.   InnoDB表的索引的几个概念 2.   覆盖索引和回表 3.   分页查询 4.   延迟关联优化 写在前面 下面的介绍均是在选用MySQL数据库和Innodb引擎的基础开展.我们先来学习索引的几个概念,帮助我们理解延迟关联优化的加快分页查询速度的原因. 一.Innodb表的索引的几个概念 InnoDB表是基于聚簇索引建立的. 索引一般分为主键索引和普通索引(辅助索引),聚簇索引并不是主键索引这样的单独的索引类型,而是一种数据存储方式.通俗的来说,单独的索引是存储了索引信息的B…
文章首发在公众号(龙台的技术笔记),之后同步到博客园和个人网站:xiaomage.info 优化项目代码过程中发现一个千万级数据深分页问题,缘由是这样的 库里有一张耗材 MCS_PROD 表,通过同步外部数据中台多维度数据,在系统内部组装为单一耗材产品,最终同步到 ES 搜索引擎 MySQL 同步 ES 流程如下: 通过定时任务的形式触发同步,比如间隔半天或一天的时间频率 同步的形式为增量同步,根据更新时间的机制,比如第一次同步查询 >= 1970-01-01 00:00:00.0 记录最大的更…
背景:MySQL分页查询语句为 ,10; 一般页面还会获取总条数,这时候还需要一条查询总条数语句 , 这样数据库需要执行两次查询操作.MySQL提供了SQL_CALC_FOUND_ROWS追踪总条数的函数,FOUND_ROWS取得总条数. ,;SELECT FOUND_ROWS(); 上面SQL语句虽然有两个结果集,但只查询一次数据库,可以提升效率. 在asp.net mvc项目中,ORM仅仅使用EF的话,处理两个结果集就有些复杂,下面这段代码可以解决 /// <summary> /// 获取…
本文出处:http://www.cnblogs.com/wy123/p/7003157.html 最近无意间看到一个MySQL分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的方案,因为现实中很多情况都不是固定不变的,能总结出来通用性的做法或者说是规律,是要考虑非常多的场景的,同时,面对能够达到优化的方式要追究其原因,同样的做法,换了个场景,达不到优化效果的,还要追究其原因.个人对此场景在不用情况表示怀疑,然后自己测试了一把,果然发现一些问题,同时也证实了一些预期的想法.…
转载自:http://qimo601.iteye.com/blog/1634748 1.Mysql的limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数.LIMIT 接受一个或两个数字参数.参数必须是一个整数常量.…
无论是传统网页还是 ajax api,我们都不得不进行数据分页,一来节省带宽二来提升页面响应速度.作为一个数据完备的 web 应用,做好分页功能能极大提升用户体验. 简单的分页查询 在 mongoose 中,我们可以利用 skip.limit来进行分页: Articl.find({}) .skip(page * 5) .limit(5) .sort({'_id':-1}) .exec(cb); 根据前端传入的 page 来跳过相应的页数,在进行查询返回结果. 分页查询优化 上面的方法在数据量较小…
为什么查询速度会慢 1.慢是指一个查询的响应时间长.一个查询的过程: 客户端发送一条查询给服务器 服务器端先检查查询缓存,如果命中了缓存,则立可返回存储在缓存中的结果.否则进入下一个阶段 服务器端进行SQL解析.预处理,再由优化器生成对应的执行计划. MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询. 将结果返回给客户端 2.数据访问 是否向数据库请求了不需要的数据 是否扫描额外的记录 3.查询的方式 一个复杂的查询还是多个简单的查询 切分查询(将大查询切分成小查询,循环完成小…
在网上看到很多关于MongoDB分页查询优化的文章,如出一辙.笔者自己实际生产中也遇到此问题,所以看了很多篇文章,这里分享一篇简明扼要的文章分享给大家,希望对大家在使用MongoDB时有所帮助. 凡事做过页面的,一般对分页不会陌生,也不会觉得它有多难:就是limit + offset的组合就可以了呀.但是,危险往往都是从最不起眼的地方开始的.在这里,我先说一下我之前在用MongoDB时遇到的问题.这类问题同样会出现在这种分页方式上. 当时,我需要对于MongoDB中的数据进行处理,每次处理一批,…
内容摘录来源:MSSQL123 ,lujun9972.github.io/blog/2018/03/13/如何编写bash-completion-script/ 一.先公布下结论: 1.如果分页排序字段是聚集索引,完全没必要对索引分页再查询数据,因为索引就是数据本身: 2.如果是非聚集索引,先对索引分页,然后再利用索引去查询数据,先分页索引确实可以减少扫描的范围: 3.如果经常按照2中的方式查询,也就是按照非聚集索引排序查询,强烈建议直接在该列上建立聚集索引: 二.MySQL经典的分页“优化”做…
说起 MySQL 的查询优化,相信大家收藏了一堆奇技淫巧:不能使用 SELECT *.不使用 NULL 字段.合理创建索引.为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解它背后的工作原理?在实际场景下性能真有提升吗?我想未必. 因而理解这些优化建议背后的原理就显得尤为重要,希望本文能让你重新审视这些优化建议,并在实际业务场景下合理的运用. MySQL 逻辑架构 如果能在头脑中构建一幅 MySQL 各组件之间如何协同工作的架构图,将有助于深入理解 MySQL 服务器.下图…
高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.虽然互联网服务号称7*24小时不间断服务,但多多少少有一些时候服务不可用,比如某些时候网页打不开,百度不能搜索或者无法发微博,发微信等.一般而言,衡量高可用做到什么程度可以通过一年内服务不可用时间作为参考,要做到3个9的可用性,一年内只能累计有8个小时不可服务,而如果要做到5个9的可用性,则一年内只能累计5分钟服务中断.所以虽说每个公司都说自己的服务是7*24不间断的,但实际上能做到5个9的屈指可数,甚至根本做不到…
网 上有不少MySQL 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果,因此简单地根据某个给出方案来配置mysql是行不通的,最好能使用 status信息对mysql进行具体的优化. mysql> show global status; 可以列出mysql服务器运行各种状态值,另外,查询mysql服务器配置信息语句: mysql> show variables; 一…
网 上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果,因此简单地根据某个给出方案来配置mysql是行不通的,最好能使用 status信息对mysql进行具体的优化. mysql> show global status; 可以列出mysql服务器运行各种状态值,另外,查询mysql服务器配置信息语句: mysql> show variables; 一…
前言 http://blog.chinaunix.net/uid-20639775-id-3337432.htmlLvs+Keepalived+Mysql单点写入主主同步高可用方案 http://blog.chinaunix.net/uid-20639775-id-3337448.htmlLvs+Keepalived+Mysql单点写入读负载均衡主主同步高可用方案http://blog.chinaunix.net/uid-20639775-id-3337471.htmlHeartbeat高可用M…
PHP+Mysql是一个最经常使用的黄金搭档,它们俩配合使用,能够发挥出最佳性能,当然,如果配合Apache使用,就更加Perfect了. 因此,需要做好对mysql的查询优化.下面通过一个简单的例子,展现不同的SQL语句对于查询速度的影响: 存在这样的一张表test,它有一个自增的id作为主索引.现在要查询id号处于某一个范围内的记录,可以使用如下SQL语句:  代码如下 复制代码 SELECT *FROM `test`order by id asclimit 208888,50 这条SQL语…
网 上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果,因此简单地根据某个给出方案来配置mysql是行不通的,最好能使用 status信息对mysql进行具体的优化. mysql> show global status; 可以列出mysql服务器运行各种状态值,另外,查询mysql服务器配置信息语句: mysql> show variables; 一…
背景 数据库作为一个非常基础的系统,任何一家互联网公司都会使用,数据库产品也很多,有Oracle.SQL Server .MySQL.PostgeSQL.MariaDB等,像SQLServer/Oracle 这类数据库在初期可以帮业务搞定很多棘手的事情,我们可以花更多的精力在业务本身的发展上,但众所周知也得交不少钱. 涉及到钱的事情在公司发展壮大以后总是会回来重新审视这个事情的,在京东早期发展的过程中确实有一些业务的数据就是直接存在oracle或者sqlserver中. 后来随着业务的发展以及数…
测试用例:查询TEST_TABLE表中TEST_COLUMN列的第10-20条数据 1,Oracle分页方法 SELECT A.* FROM ( SELECT ROWNUM ROWNO, B.* FROM ( SELECT * FROM TEST_TABLE WHERE TEST_COLUMN = 'TEST' ORDER BY TEST_TIME DESC )B WHERE ROWNUM  <= 20 ) A WHERE A.ROWNO >= 10; 2,SQL Server分页方法 SEL…
MySql 分页 由于最近项目需要,于是就简单写了个分页查询.总体而言MySql 分页机制较为简单.数据库方面只需要使用limit即可实现分页.前后台交互就直接用session传了值. 下面就写写具体的实现过程: 首先,创建一个Page VO类 其中,总记录数可由数据库查得.每页默认记录数由你自己设定: 总页数由总记录数及每页默认记录数获取,当然得有一个条件判断: 当前页数由当前记录数及每页默认记录数获取,当然这也得有一个条件判断: 当前记录条数可由页面传值同时配合每页默认记录数获取. pack…
开发环境 FluentData3.0.VS.NET2010.Mysql5.0 问题描述 使用FluentData对一个表(记录数28)进行分页时,突然发现一个诡异的问题,第一页返回10条数据正常,第二页返回18条数据,第三页返回8条数据 在排除了代码问题后,逐页获取生成的分页SQL语句 第一页:select * from orders order by orderid limit 0,10 第二页:select * from orders order by orderid limit 10,20…
MySQL的各种高可用方案,大多是基于以下几种基础来部署的(也可参考:Mysql优化系列(0)--总结性梳理   该文后面有提到)1)基于主从复制:2)基于Galera协议(PXC):3)基于NDB引擎:4)基于中间件/proxy:5)基于共享存储:6)基于主机高可用:在这些可选项中,最常见的就是基于主从复制的方案,其次是基于Galera的PXC方案,我们重点说说这两种方案.其余几种方案在生产上用的并不多,我们只简单说下. 一.主从复制的高可用方案:(1)双节点主从+keepalived/hea…
原文: http://imysql.com/2015/09/14/solutions-of-mysql-ha.shtml?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io 本次专题是 MySQL高可用方案选型,这个专题想必有很多同学感兴趣. 高可用的意义以及各种不同高可用等级相应的停机时间我就不必多说了,直接进入主题. 可选MySQL高可用方案 MySQL的各种高可用方案,大多是基于以下几种基础来部署的: 基于主从复制:…
转载:http://www.infoq.com/cn/articles/exploration-of-distributed-mysql-cluster-scheme?utm_campaign=rightbar_v2&utm_source=infoq&utm_medium=articles_link&utm_content=link_text 背景 数据库作为一个非常基础的系统,任何一家互联网公司都会使用,数据库产品也很多,有Oracle.SQL Server .MySQL.Pos…
php+mysql分页类的简单代码 时间:2016-02-25 06:16:26来源:网络 导读:php+mysql分页类的简单代码,二个php分页类代码,对商品进行分页展示,当前页面数,每个页面展示页面数,简单实用的php分页代码.   php+mysql分页类的简单代码 一.php分页类代码 复制代码代码示例: class PageModel {      /**      * 获取分页数组      * @param unknown $page 当前页面数      * @param un…
一,sqlserver分页: )) ID FROM 表名 AS 表名1_1 ORDER BY ID)) ORDER BY ID; 二:mysql分页 )*每页显示的数据条数,当前页码 * 每页显示的数据条数); 三:orcale分页 ));…