Sql 或者操作员太慢,我应该重写到IF_其他吗?
所以今天我必须调整一个旧程序。我进入这个查询(所有列、表的名称都已更改): 查询计划(对于具有修复代码的单个查询,不声明Sql 或者操作员太慢,我应该重写到IF_其他吗?,sql,oracle,Sql,Oracle,所以今天我必须调整一个旧程序。我进入这个查询(所有列、表的名称都已更改): 查询计划(对于具有修复代码的单个查询,不声明WHERE('11111'=''或col1='11111')): 或声明: 如果声明: 其他声明: 试试这段代码 SELECT col1, col2, col3, col4, col5, MAX(col6) FROM data_table WHERE col1 = decode(l_col1, ' ', col1) AND col
WHERE('11111'=''或col1='11111')
):
或声明:
如果声明:
其他声明:
试试这段代码
SELECT col1, col2, col3, col4, col5, MAX(col6)
FROM data_table
WHERE col1 = decode(l_col1, ' ', col1)
AND col6 <= l_col6
GROUP BY col1, col2, col3, col4, col5;
选择col1、col2、col3、col4、col5、MAX(col6)
从数据表
其中col1=解码(l_col1',,col1)
和col6如果l_col1='11111'为什么首先要检查“”?@Rene Sr我无法为其中(l_col1=''或col1=l_col1)
生成查询计划,所以我必须硬编码l_col1
是传递给过程的参数。使用空值会有区别吗?其中(l_col1为null或l_col1=col1)。@Rene(l_col1为null或col1=l_col1)
运行min time=0.2秒,通常为~0.21秒显示我们正在谈论的许多插入记录?谢谢,您的建议解决了我的第二个问题。
DECLARE
l_col1 varchar2(20) := '11111';
l_col6 number := 20160131;
BEGIN
IF l_col1 = ' '
THEN
INSERT INTO temp_table (col1, col2, col3, col4, col5, col6)
SELECT col1, col2, col3, col4, col5, MAX(col6)
FROM data_table
WHERE col6 <= l_col6
GROUP BY col1, col2, col3, col4, col5;
ELSE
INSERT INTO temp_table (col1, col2, col3, col4, col5, col6)
SELECT col1, col2, col3, col4, col5, MAX(col6)
FROM data_table
WHERE col1 = l_col1
AND col6 <= l_col6
GROUP BY col1, col2, col3, col4, col5;
END IF;
END;
SELECT col1, col2, col3, col4, col5, MAX(col6)
FROM data_table
WHERE col1 = decode(l_col1, ' ', col1)
AND col6 <= l_col6
GROUP BY col1, col2, col3, col4, col5;