鍍金池/ 問(wèn)答/數(shù)據(jù)庫(kù)/ SQL分頁(yè)過(guò)多時(shí), 如何優(yōu)化?

SQL分頁(yè)過(guò)多時(shí), 如何優(yōu)化?

SQL分頁(yè)過(guò)多時(shí)(例如 limit 1000000, 20), 效率會(huì)明顯降低下, 如何優(yōu)化? 這里以mysql為例

回答
編輯回答
未命名

SELECT * FROM product WHERE ID > = (select id from product limit 1000000, 1) limit 20 ;

2017年8月26日 03:49
編輯回答
神曲

SELECT * FROM product WHERE ID > =(select id from product limit 1000000, 1) limit 20 ;

2017年7月6日 04:27
編輯回答
笑浮塵

我這里有一個(gè)解決方案。這是以前看資料學(xué)習(xí)到的,具體在哪里忘記了,如果有更好的想法,可以交流一下。
創(chuàng)建一個(gè)索引表,它提供了與目標(biāo)表中的鍵相關(guān)的順序關(guān)系, 可以將此索引表連接到目標(biāo)表,并使用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;
2017年7月22日 16:09