postgres limit 分頁的坑

環境: postgres11

同一條sql
SELECT * from alarmtype limit 3 OFFSET 0 ;
如果返回的id是0,1,2的記錄
如果修改id爲1的其中一個字段,再用上面的sql查詢,你會發現返回的id可能會是0,2,3,

竟然是無序的,想使用limit,offset分頁,還需要先排序!

引用別的哥們的翻譯
查詢優化器在生成查詢規劃的時候會考慮LIMIT,因此如果你給 LIMIT和OFFSET不同的東西,那麼你很可能收到不同的規劃(產生不同的行順序)。 因此,使用不同的LIMIT/OFFSET值選擇不同的查詢結果的子集將生成不一致的結果, 除非你用ORDER BY強制一個可預料的順序。這可不是臭蟲; 這是一個很自然的結果,因爲 SQL 沒有許諾把查詢的結果按照任何特定的順序發出,除非用了ORDER BY來約束順序。

mysql看到了估計會笑了,沒有許諾啊。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章