SQL分页过多时(例如 limit 1000000, 20), 效率会明显降低下, 如何优化? 这里以mysql为例
SELECT * FROM product WHERE ID > = (select id from product limit 1000000, 1) limit 20 ;
我这里有一个解决方案。这是以前看资料学习到的,具体在哪里忘记了,如果有更好的想法,可以交流一下。
创建一个索引表
,它提供了与目标表中的键相关的顺序关系, 可以将此索引表连接到目标表,并使用where子句更高效地获取所需的行。
CREATE TABLE test (
test_no int not null auto_increment,
id int not null,
primary key(test_no),
unique(id)
);
TRUNCATE test;
INSERT INTO test (id) SELECT id FROM mytable ORDER BY id;
SELECT mytable.*
FROM mytable
INNER JOIN seq USING(id)
WHERE test.test_no BETWEEN 1000000 AND 1000020;
SELECT * FROM product WHERE ID > =(select id from product limit 1000000, 1) limit 20 ;