SELECT *
FROM tab c
WHERE c.status = 1
ORDER BY c.id ASC
LIMIT 0, 20 这个执行有50s+,检索出来1条符合条件的数据, 这个表5.7g,1896002条记录有啥好的优化方案么,那么多的重复数据,+索引好么?

解决方案 »

  1.   

    在id上建立一个聚集索引就不会那么慢了,再在status上建一个非聚集索引就更不慢了
      

  2.   

    满足条件的数据占比大,考虑 status+id 的复合索引,否则考虑 id+ status 的复合索引
    如果表的数据总量不是非常大的话,复合索引可以改成单键索引( 只保留第一列)
      

  3.   

    千万级别的数据mysql还是可以的,使用explain来查看执行计划,然后尝试使用index、partion方案来调试。