zoukankan      html  css  js  c++  java
  • MySQL limit 分页查询优化(百万级优化)

    1)简单的查询分页;分每页5条 limit [offset],[rows]

    select t.* from t_topic t LIMIT 90000,10;

    2)建立id索引;查询索引id

    select * from t_topic where id>=(select id from t_topic order by id limit 90000,1) limit 10;

    3)使用 between and 语句分页效率快N倍

    SELECT * FROM t_topic WHERE id BETWEEN 90000 AND 90010;  

    4)分表存储;30万条记录的id存存储到单独的一个索引表t里面;先查找索引表t里面的id索引;然后再查询

    5)使用复合索引查询数据

    如果对于有where 条件,又想走索引用limit的,必须设计一个索引,将where 放第一位,limit用到的主键放第2位,而且只能select 主键!
    完美解决了分页问题了。可以快速返回id就有希望优化limit , 按这样的逻辑,百万级的limit 应该在0.0x秒就可以分完。

    看来mysql 语句的优化和索引时非常重要的!

    #先查询索引id
    select
    id from t_topic limit 90000,10;
    #然后在in()里面包含该id
    SELECT * FROM t_topic WHERE id in (90001,90002,90003,90004,90005,90006,90007,90008,90009,90010);

    通过简单的变换,其实思路很简单;通过优化索引,找出id,并拼成 “90001,90002,90003,90004,90005,90006,90007,90008,90009,90010″ 这样的字符串;

    查询效率在百万级别的数据不成问题。  

    附图:

  • 相关阅读:
    Best Time to Buy and Sell Stock(动态规划)
    word break
    Container With Most Water
    Partition List(链表的插入和删除操作,找前驱节点)
    取样问题(编程珠玑)
    统计指标
    脚本化加载文件与转储
    azkaban调度
    hive自定义UDTF函数叉分函数
    hive数据仓库建设
  • 原文地址:https://www.cnblogs.com/wanglijun/p/8919438.html
Copyright © 2011-2022 走看看