面试曾被问及过这么一个问题 select * from test order by id limit 9000000,100 如何优化。当时脑子短路了,只想着mysql是否有自带的方法能将游标定位到9000000。其实只需要用where条件来限制即可。
1 2 3 4 5 6 7 8 9 10 11 12 |
CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=10000000 DEFAULT CHARSET=utf8; //当id连续且没有status状态限制的情况下,使用以下SQL,性能最快 0.001ms select * from test where id >=9000000 order by id limit 100; //当id非连续或有status状态限制的情况下,使用以下SQL,性能有略微提升 1.420ms //在实际环境中,如果子查询过慢的话,可将SQL拆分成2句即可 select * from test where id >= (select id from test order by id limit 9000000,1) order by id limit 100; |