zoukankan      html  css  js  c++  java
  • mysql下limit分页优化思路

    mysql的分页查询是开发人员工作经常会遇到的问题,这里稍写几种简单优化方法。

    #表结构
    MySQL [test]> show create table houseG;
    *************************** 1. row ***************************
           Table: house
    Create Table: CREATE TABLE `house_backup` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `title` varchar(200) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
      `address` varchar(500) COLLATE utf8mb4_bin DEFAULT '',
      `area` varchar(100) COLLATE utf8mb4_bin DEFAULT '',
      `aspect` varchar(10) COLLATE utf8mb4_bin DEFAULT '',
      `house_type` varchar(20) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
      `price` varchar(10) COLLATE utf8mb4_bin DEFAULT '',
      `add_time` int(11) unsigned DEFAULT '0',
      `test_column` varchar(12) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2379248 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
    1 row in set (0.00 sec)
    
    ERROR: No query specified
    
    #总数
    MySQL [test]> select count(1) from house;
    +----------+
    | count(1) |
    +----------+
    |  1456960 |
    +----------+
    1 row in set (0.45 sec)
    
    #初始位置查询
    MySQL [test]> select id,title from house_backup limit 10G;
    #查询的数据忽略
    10 rows in set (0.00 sec)
    
    ERROR: No query specified
    
    #10w的偏移量查询
    MySQL [test]> select id,title from house limit 100000,10G;
    #查询的数据忽略
    10 rows in set (0.03 sec)
    
    ERROR: No query specified
    
    #100w的偏移量查询
    MySQL [test]> select id,title from house limit 1000000,10G;
    #查询数据忽略
    10 rows in set (0.37 sec)
    
    ERROR: No query specified
    
    #随着偏移量增大,查询越来越耗时

    这里用100w偏移量分页sql做优化

    一. 使用 IN 关键字

    #这里先查询id,再用in关键字查询,正常情况id是主键索引,效率很高,如果是其他字段需要先创建索引(查询id的sql不做打印)
    MySQL [test]> select id,title from house_backup where id in (1000001,1000002,10000003,1000004,1000005,1000006,1000007,1000008,1000009,1000020)G;
    #查询数据忽略
    Empty set (
    0.00 sec) ERROR: No query specified

    二. 使用 BETWEEN ... AND ...

    MySQL [test]> select id,title from house_backup where id between 2172904 and 2172913; 
    #查询数据忽略
    11 rows in set (0.00 sec)

    上面两种查询均需要保证id是有序。

  • 相关阅读:
    myeclipse导入项目中的乱码问题的解决
    myeclipse中的jar包的引入与新建
    myeclipse如何修改默认存储文件路径
    oracle迁移数据到mysql
    如何设置myeclipse的编码格式
    tns的查找与修改
    在PL/SQL中输入SQL语句时关键字的首字母自动变成大写
    滤器处理中文编码
    题解导航
    莫队总结应用
  • 原文地址:https://www.cnblogs.com/wscsq789/p/13903695.html
Copyright © 2011-2022 走看看