【优化前】
SELECT id
FROM tab_a
WHERE city = 4
ORDER BY id
LIMIT 1000000 , 10 ;
【说明】
limit原理是先读n条记录,然后抛弃这n条,读m条想要的。n越大,性能越差。这里n是 1000000了!
【优化方案1】inner join 子查询
SELECT id
FROM table_a
WHERE city=4
INNER JOIN
(SELECT id
FROM table_a
WHERE city=4
ORDER BY id
LIMIT 1000000 , 10)
USING (id)
------------------------
优化前有更多I/O开销:先读索引,再读数据,然后抛弃无需的1000000行。
优化后中子查询只读索引,然后通过id直接读取需要的列。
------------------
【优化方案2】分表
上面可清楚看出把city分表掉,还会更快
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。