【发布时间】:2013-10-09 09:42:44
【问题描述】:
我正在尝试检查我的表中是否存在记录。我发现最有效的方法是使用 DUAL 表。但是,我不能 100% 确定这种方法是如何工作的。我有一个包含数千条记录(几乎一百万条)的表。这两种方法有什么主要区别吗,记住表中存在很多记录:
方法一:
SELECT 1
FROM DUAL
WHERE EXISTS(SELECT *
FROM MY_TABLE
WHERE MY_COLUMN_PK = 'MY_VALUE'
AND MY_COLUMN = 'MY_VALUE')
方法二:
SELECT 1
FROM DUAL
WHERE EXISTS(SELECT *
FROM MY_TABLE
WHERE MY_COLUMN_PK = 'MY_VALUE'
AND MY_COLUMN = 'MY_VALUE'
AND ROWNUM=1)
我在我的数据库客户端软件中执行了两个查询,两个查询的执行时间相似。
注意:MY_COLUMN_PK 是我的表的主键,而MY_COLUMN 不是主键并且没有索引。
【问题讨论】:
-
“方法2”更有效。
-
我们不能说不知道您拥有哪些主键和唯一键。
-
@HardikVinzava 方法 1 选择表中的所有记录,而方法 2 仅选择第一条记录。我知道方法 2 更有效,但为什么我得到相同的执行时间?
-
因为你是用主键查询的。 Oracle 知道,如果有匹配项,无论如何它只会匹配 1 行。
-
但我并没有只在 where 子句中使用主键