1

我正在使用 Postgresql (cockroachdb),我想选择一个特定的行。例如,有数千条记录,我想选择行号 999。

在这种情况下,我们将使用 LIMIT 和 OFFSET,SELECT * FROM table LIMIT 1 OFFSET 998;

但是,根据这篇文章,使用 LIMIT 和 OFFSET 可能会导致性能问题。所以我想知道是否有办法在没有全表扫描的情况下获取特定行。

我觉得这是可能的,因为数据库似乎按主键对数据进行排序,当我这样做时,SELECT * FROM table;它总是显示排序结果。由于它是按主键排序的,数据库可以使用索引来访问特定的行,对吧?

4

1 回答 1

1

如果您根据主键(例如SELECT * FROM table WHERE <primary key> = <value>)选择行,则引擎盖下不需要扫描。WHERE如果您在表上定义二级索引并应用基于二级索引中的列进行过滤的子句,则同样如此。

于 2018-04-01T01:01:17.420 回答