SQL - 获取没有全表扫描的特定行

时间:2018-03-29 23:09:57

标签: sql cockroachdb

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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