【发布时间】:2019-06-25 06:17:54
【问题描述】:
有一张桌子:
key1, fkey1, option, symbol
1 5 'A' 1
2 6 'B' 1
3 7 'C' 1
4 8 'D' 2
假设我有记录 key1=2 的数据。这一行有一个symbol = 1,所以我的目标是获取所有行(尤其是fkey1 列的值),其中symbol = 1(此处所需的输出:fkey = 5,6,7)。
问题:这可以在一个select 查询中完成,并且只查询该表一次(!)吗?不像:
SELECT fkey1 from table where symbol = (select symbol from table where key = 2)
我正在寻找一种方法来最大限度地优化它。这个表实际上有更多的列,而 PK/FK 由很少的列组成。
【问题讨论】:
-
我认为你的做法是最快的。子选择
(select symbol from table where key = 2)使用唯一索引扫描完成,只得到一个结果,然后外部选择使用普通索引扫描完成。只需确保您有合适的索引 - “symbol,fkey1,...”上应该有一个以优化性能。
标签: sql oracle performance