我正在使用Postgresql(cockroachdb),我想选择一个特定的行。例如,有数千条记录,我想选择行号999。
在这种情况下,我们将使用LIMIT和OFFSET,SELECT * FROM table LIMIT 1 OFFSET 998;
但是,根据this post,使用LIMIT和OFFSET可能会导致性能问题。所以我想知道是否有办法在没有全表扫描的情况下获得特定的行。
我觉得这是可能的,因为数据库似乎按主键对数据进行排序,当我执行SELECT * FROM table;
时,它总是显示排序结果。由于它是按主键排序的,因此数据库可以使用索引来访问特定的行,对吗?
答案 0 :(得分:1)
如果您根据主键选择行(例如SELECT * FROM table WHERE <primary key> = <value>
),则无需扫描。如果在表上定义二级索引并应用基于二级索引中的列进行过滤的WHERE
子句,情况也是如此。