【优化前】
SELECT `id` FROM `tab_a`
WHERE `city` = 4
ORDER BY `id` DESC
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 DESC
LIMIT 1000000 , 10)
USING (id)
------------------------
优化前有更多I/O开销:先读索引,再读数据,然后抛弃无需的1000000行。
优化后的SQL子查询只读索引就可以了,然后通过id直接读取需要的列。
------------------
【优化方案2】分表
上面可清楚看出把city分表掉,还会更快
本文探讨了SQL查询中limit参数导致的性能问题,并提出了两种优化方案:一是使用inner join子查询来减少I/O开销;二是建议对数据进行分表处理,以进一步提升查询效率。
1615

被折叠的 条评论
为什么被折叠?



