使用子查询和筛选条件能够很好地避免这个问题
首先我们有个需求,从10000000 万数据量的orders_test表里取出100条数据,至于怎么取没有要求。
表结构如下:
CREATE TABLE `orders_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`o_date` date DEFAULT NULL,
`c_id` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10944333 DEFAULT CHARSET=utf8
表数据量:
使用以下语句来取100条看看:
select * from orders_test order by id limit 10,100;
可以看到还是比较快的
使用以下语句试试看:
select * from orders_test order by id limit 10000000,100;
可以看到该语句用时较长
优化方案:
使用子查询和筛选条件能够很好地避免这个问题
select * from orders_test a where a.id >=
(select id from orders_test b where id > 9999999 ORDER BY b.id limit 1)
limit 100
> OK
> 时间: 0.036s
这里效率有一定的提升