mysql分页查询的原理是,先通过where将所有数据查出来,查出来之后,再将offset的数据扔掉。

    假如有一张表symptom,symptom_id是主键,表里面有221w数据

    1.优化前(42s)

    1. select * from symptom ORDER BY create_date desc limit 2210000, 15

    2.内连接优化后(7s)

    1. SELECT t1.* FROM symptom t1
    2. INNER JOIN ( SELECT symptom_id FROM symptom ORDER BY create_date DESC LIMIT 2210000, 15 ) t2
    3. ON t1.symptom_id = t2.symptom_id

    原理:因为大部分数据都需要抛弃,所以我们通过人工回表的方式先把需要的主键id获取到,然后通过索引获取。
    3.如果再create_date上建立索引,耗时0.5s(如果order的字段没有加索引,则会通过排序算法实现,否则走索引),如果没有order字段,走主键索引。