我需要执行类似的事情:
select
[very big SQL]
where phone_number in(:SQL2)
是否可以为SQL2使用绑定变量?
我想保存主要SQL的执行计划。
感谢。
答案 0 :(得分:2)
在执行SQL2
之前创建一个临时表并保存SQL1
的结果:
CREATE GLOBAL TEMPORARY TABLE mytemptable (id INT NOT NULL)
CREATE OUTLINE ol_sql1
ON
SELECT *
FROM sql1
WHERE id IN
(
SELECT id
FROM mytemptable
)
INSERT
INTO mytemptable
SELECT *
FROM sql2
SELECT *
FROM sql1
WHERE id IN
(
SELECT id
FROM mytemptable
)
答案 1 :(得分:0)
继Quassanoi的观点。听起来你可能不熟悉临时表。 This是一个很好的介绍。
您只需创建一次表格。然后在给定的会话中首先:
不存在与其他会话数据发生冲突/重叠的风险。
答案 2 :(得分:0)
如果这个查询被执行了很多次,我就不会使用临时表了。
有一个'技巧'来绑定一个inlist,Tom Kyte在他的博客中描述了这个:
http://tkyte.blogspot.com/2006/06/varying-in-lists.html
我敢打赌,效率要高得多。使用SQL Trace很容易证明。