數(shù)據(jù)庫中存了3000W條數(shù)據(jù),兩種分頁查詢測試時(shí)間
第一種
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
第二種:
失去等待出來結(jié)果的耐心?。?!
建議使用第一種分頁方法~
補(bǔ)充:postgreSQL數(shù)據(jù)庫limit分頁、排序
limit分頁語法:
select * from persons limit A offset B;
解釋:
A就是你需要顯示多少行;
B就是查詢的起點(diǎn)位置。
示例:
select * from persons limit 5 offset 0 ;
意思是,起點(diǎn)0開始查詢,返回5條數(shù)據(jù)。
select * from persons limit 15 offset 5 ;
意思是,起點(diǎn)5開始查詢,返回15條數(shù)據(jù)。
特殊:
select * from persons limit 5 ;
這個(gè)就類似:
select * from persons limit 5 offset 0;
也就是,從起點(diǎn)0開始查詢,返回5條數(shù)據(jù)。
按規(guī)則排序,同時(shí)也要分頁:
select * from persons order by lastname limit 5 offset 0;
分頁并顯示行號(hào),類似oracle里的rownum:
select *,row_number() over() as rownum from persons limit 5 offset 0;
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- postgresql 實(shí)現(xiàn)查詢某時(shí)間區(qū)間的所有日期案例
- 淺析postgresql 數(shù)據(jù)庫 TimescaleDB 修改分區(qū)時(shí)間范圍
- postgresql連續(xù)歸檔及時(shí)間點(diǎn)恢復(fù)的操作
- postgresql 實(shí)現(xiàn)得到時(shí)間對(duì)應(yīng)周的周一案例
- postgresql數(shù)據(jù)庫使用說明_實(shí)現(xiàn)時(shí)間范圍查詢