关于带where条件的mysql 分页优化中联合索引的使用

假如table表有联合索引(sex, id)
同时id本身是主键
那么下面这个sql走索引吗?

select * from table where sex='m' order by id limit 1000000,10

我的感觉是,根据sql执行顺序
应该是先执行from table where sex='m',筛选出结果集,然后再去order by id吧,这样感觉就不会走索引了
所以必须要

select * from table in (select id from table where sex='m' order by id limit 1000000,10)

这样吗?

阅读 3.1k
2 个回答
新手上路,请多包涵

(1)SQL 语句执行顺序:
SELECT

 FROM          --1
    WHERE    --2
      GROUP BY   --3
        HAVING      --4
           ORDER BY  --5
           

(2) 如果select 只查询索引字段,order by 索引字段会用到索引,要不然就是全表排列;
(3) 如果有where 条件,比如where sex='m' order by id 这样order by 也会用到索引!

不用EXPLAIN,发帖子问?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题