PostgreSQL 分頁查詢時間的2種比較方法小結

數據庫中存瞭3000W條數據,兩種分頁查詢測試時間

第一種

SELECT * FROM test_table WHERE i_id> 1000 limit 100;

Time: 0.016s

第二種

SELECT * FROM test_table limit 100 OFFSET 1000;

Time: 0.003s

第一種

SELECT * FROM test_table WHERE i_id> 10000 limit 100;

Time: 0.004s

第二種

SELECT * FROM test_table limit 100 OFFSET 10000;

Time: 0.508s

第一種:

SELECT * FROM test_table WHERE i_id> 100000 limit 100;

Time: 0.003s

第二種:

SELECT * FROM test_table limit 100 OFFSET 100000;

Time: 2.377s
SELECT * FROM test_table WHERE c_act='登錄' limit 100 OFFSET 100000;

Time: 3.649s

第一種:

SELECT * FROM test_table WHERE i_id> 1000000 limit 100;

Time: 0.004s

第二種:

SELECT * FROM test_table limit 100 OFFSET 1000000;

Time: 14.403s

第一種:

SELECT * FROM test_table WHERE i_id> 10000000 limit 100;

Time: 0.057s

第二種:

失去等待出來結果的耐心!!!

建議使用第一種分頁方法~

補充:postgreSQL數據庫limit分頁、排序

limit分頁語法:

select * from persons limit A offset B;

解釋:

A就是你需要顯示多少行;

B就是查詢的起點位置。

示例:

select * from persons limit 5 offset 0 ;

意思是,起點0開始查詢,返回5條數據。

select * from persons limit 15 offset 5 ;

意思是,起點5開始查詢,返回15條數據。

特殊:

select * from persons limit 5 ;

這個就類似:

select * from persons limit 5 offset 0;

也就是,從起點0開始查詢,返回5條數據。

按規則排序,同時也要分頁:

select * from persons order by lastname limit 5 offset 0;

分頁並顯示行號,類似oracle裡的rownum:

select *,row_number() over() as rownum from persons limit 5 offset 0;

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。

推薦閱讀: