• 请不要在回答技术问题时复制粘贴 AI 生成的内容
kisshere
V2EX  ›  程序员

2 千万的 myisam 表,只对自增 id 进行分页,如何快速进行分页

  •  
  •   kisshere · Mar 26, 2019 · 3496 views
    This topic created in 2780 days ago, the information mentioned may be changed or developed.

    目前想用 php 动态输出网站 sitemap,而网站的网址形式都如 www。example。com/[数据库自增 id].html,所以只需要对数据库 primary key 进行分页,在 offset 比较小的情况下,query 时间很短,但是当 offset 很大的情况下(每个 sitemap 总共 500 条 URL ):

    SELECT id FROM MyTable ORDER BY id ASC LIMIT 19990000,500
    

    查询时间很长,像这种只涉及到自增 id 的大表分页,怎样快速进行分页?

    10 replies  •  2019-03-26 17:52:57 +08:00
    vicalloy
    vicalloy
    Mar 26, 2019
    1
    太老的页面直接不给查。
    分表。
    lostvincent
    lostvincent
    Mar 26, 2019
    2
    关键词:late row lookup
    jswh
    jswh
    Mar 26, 2019
    3
    offset 大的时候用 id > x 会比 limit 好一点
    keepeye
    keepeye
    Mar 26, 2019
    4
    select * from YOURTABLE where id > (select id from YOURTABLE limit OFFSET,SIZE)
    sagaxu
    sagaxu
    Mar 26, 2019 via Android
    5
    https://explainextended.com/2011/02/11/late-row-lookups-innodb/

    只有 myisam 才有这个问题,pgsql 或者 innodb 没有这个坑
    kisshere
    kisshere
    OP
    Mar 26, 2019
    6
    @jswh 生成 sitemap 只能这种分页吧,不能游标分页
    haiyang416
    haiyang416
    Mar 26, 2019
    7
    不要用 offset 来做了,把每次查询的最后一个 ID 作为分页依据。
    snappyone
    snappyone
    Mar 26, 2019
    8
    参考 4 楼子查询
    opengps
    opengps
    Mar 26, 2019
    9
    这个情况,表分区特别合适
    dongyu
    dongyu
    Mar 26, 2019
    10
    用索引过滤
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5287 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 02:14 · PVG 10:14 · LAX 18:14 · JFK 21:14
    ♥ Do have faith in what you're doing.