前言

在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset 

所以通常在查询数据的时候,我们都会用到limit分页,因为这样避免了全表查询,会提高查询效率。但是在一个表的数据量多了之后,分页查询会明细的变慢,下面来一起看看详细的介绍吧

MySQL分页Limit优化

创建测试表card 2000万数据

mysql> select count(*) from card;+----------+| count(*) |+----------+| 20000000 |+----------+1 row in set (0.00 sec)
mysql> select * from card limit 1000,10;+---------+--------------------------------------+| card_id | card_number       |+---------+--------------------------------------+| 1001 | 13fc90a6-2e3b-11e8-ae62-9c5c8e6e37cf || 1002 | 13fc923e-2e3b-11e8-ae62-9c5c8e6e37cf || 1003 | 13fc93d5-2e3b-11e8-ae62-9c5c8e6e37cf || 1004 | 13fc956a-2e3b-11e8-ae62-9c5c8e6e37cf || 1005 | 13fc9702-2e3b-11e8-ae62-9c5c8e6e37cf || 1006 | 13fc9899-2e3b-11e8-ae62-9c5c8e6e37cf || 1007 | 13fc9a31-2e3b-11e8-ae62-9c5c8e6e37cf || 1008 | 13fc9bc6-2e3b-11e8-ae62-9c5c8e6e37cf || 1009 | 13fc9d5e-2e3b-11e8-ae62-9c5c8e6e37cf || 1010 | 13fc9ef5-2e3b-11e8-ae62-9c5c8e6e37cf |+---------+--------------------------------------+10 rows in set (0.00 sec)
mysql> select * from card limit 1000000,10;+---------+--------------------------------------+| card_id | card_number       |+---------+--------------------------------------+| 1000001 | 2d87021a-2e3b-11e8-ae62-9c5c8e6e37cf || 1000002 | 2d8703ac-2e3b-11e8-ae62-9c5c8e6e37cf || 1000003 | 2d87053b-2e3b-11e8-ae62-9c5c8e6e37cf || 1000004 | 2d8706cd-2e3b-11e8-ae62-9c5c8e6e37cf || 1000005 | 2d87085f-2e3b-11e8-ae62-9c5c8e6e37cf || 1000006 | 2d8709f1-2e3b-11e8-ae62-9c5c8e6e37cf || 1000007 | 2d870b83-2e3b-11e8-ae62-9c5c8e6e37cf || 1000008 | 2d870d18-2e3b-11e8-ae62-9c5c8e6e37cf || 1000009 | 2d870eaa-2e3b-11e8-ae62-9c5c8e6e37cf || 1000010 | 2d871039-2e3b-11e8-ae62-9c5c8e6e37cf |+---------+--------------------------------------+10 rows in set (0.18 sec)
mysql> select * from card limit 10000000,10;+----------+--------------------------------------+| card_id | card_number       |+----------+--------------------------------------+| 10000001 | b11ad76c-2e49-11e8-ae62-9c5c8e6e37cf || 10000002 | b11aefd5-2e49-11e8-ae62-9c5c8e6e37cf || 10000003 | b11af868-2e49-11e8-ae62-9c5c8e6e37cf || 10000004 | b11b0031-2e49-11e8-ae62-9c5c8e6e37cf || 10000005 | b11b07ad-2e49-11e8-ae62-9c5c8e6e37cf || 10000006 | b11b0f0f-2e49-11e8-ae62-9c5c8e6e37cf || 10000007 | b11b1669-2e49-11e8-ae62-9c5c8e6e37cf || 10000008 | b11b1db2-2e49-11e8-ae62-9c5c8e6e37cf || 10000009 | b11b24fa-2e49-11e8-ae62-9c5c8e6e37cf || 10000010 | b11b2c37-2e49-11e8-ae62-9c5c8e6e37cf |+----------+--------------------------------------+10 rows in set (1.29 sec)

那么怎么去避免这个扫描100万条数据呢。我们可以明确的知道,100万之后的主键是大于100万的。所以我们可以将sql改写,让其用到索引,降低扫描的行数

mysql> select * from card where card_id>=1000000 limit 10;+---------+--------------------------------------+| card_id | card_number       |+---------+--------------------------------------+| 1000000 | 2d870088-2e3b-11e8-ae62-9c5c8e6e37cf || 1000001 | 2d87021a-2e3b-11e8-ae62-9c5c8e6e37cf || 1000002 | 2d8703ac-2e3b-11e8-ae62-9c5c8e6e37cf || 1000003 | 2d87053b-2e3b-11e8-ae62-9c5c8e6e37cf || 1000004 | 2d8706cd-2e3b-11e8-ae62-9c5c8e6e37cf || 1000005 | 2d87085f-2e3b-11e8-ae62-9c5c8e6e37cf || 1000006 | 2d8709f1-2e3b-11e8-ae62-9c5c8e6e37cf || 1000007 | 2d870b83-2e3b-11e8-ae62-9c5c8e6e37cf || 1000008 | 2d870d18-2e3b-11e8-ae62-9c5c8e6e37cf || 1000009 | 2d870eaa-2e3b-11e8-ae62-9c5c8e6e37cf |+---------+--------------------------------------+10 rows in set (0.00 sec)

总结

更多相关文章

  1. Android(安卓)多媒体扫描过程(Android(安卓)Media Scanner Proces
  2. Android(安卓)Chromium WebView html js 开发系列
  3. Android(安卓)Calendar使用过程中遇到的问题
  4. CyanogenMod 编译 Google Galaxy Nexus (GSM) 全过程
  5. Android(安卓)启动过程
  6. Android(安卓)启动过程(2)
  7. android 多媒体扫描过程(Android(安卓)Media Scanner Process)
  8. [置顶] Android加载数据过程中的菊花显示
  9. android分页查询获取系统联系人信息

随机推荐

  1. 注册中心 Eureka 源码解析 —— 网络通信
  2. 消息中间件 RocketMQ 源码解析 —— 调试
  3. 分布式作业 Elastic-Job-Lite 源码分析
  4. 基于Spring Boot实现图片上传/加水印一把
  5. 轻量级 Memcached缓存代理 twemproxy实践
  6. 分布式作业系统 Elastic-Job-Lite 源码分
  7. Spring Boot 工程集成全局唯一ID生成器 V
  8. Eureka Server 开启Spring Security Basi
  9. 微信小程序入门与实战-全新版
  10. 注册中心 Eureka 源码解析 —— Eureka-S