如何优化MySQL ORDER BY +巨大的LIMIT偏移量

Did*_*nov 2 mysql sql optimization

表:

CREATE TABLE `test` (
  `uid` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `rating` smallint(5) unsigned NOT NULL DEFAULT '100',
  PRIMARY KEY (`uid`),
  KEY `rating` (`rating`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

此查询运行得足够快(0.015秒):

SELECT uid FROM test ORDER BY rating DESC LIMIT 0,100
Run Code Online (Sandbox Code Playgroud)

但是有很大的LIMIT偏移它运行得很慢(2.215s):

SELECT uid FROM test ORDER BY rating DESC LIMIT 10000,100
Run Code Online (Sandbox Code Playgroud)

怎么能摆脱巨大的LIMIT抵消?!

Ami*_*Ami 6

LIMIT 10000, 100MySQL必须扫描10100条记录.如果你能记住你在窗口中的位置,那可能会更好:

SELECT uid
FROM test
WHERE rating > :last_rating
ORDER BY rating DESC LIMIT 0,100
Run Code Online (Sandbox Code Playgroud)

在这种情况下:last_rating是上一个查询的最后一个评级.