我有一个以下形式的查询:
select a, b, c, d, e, f, g, h,
row_number () over (partition by a, b order by c, d, e, f) as order
from table;
Run Code Online (Sandbox Code Playgroud)
而且它的性能有点糟糕。
我们尝试创建 2 个索引,第一个用于按列(a 和 b)分区,第二个用于按列(c、d、e、f)排序。
使用解释计划我们发现索引没有被使用。尽管它们对于带有 group by 子句的其他查询很有用。
关于如何重构查询或重新创建索引以帮助提高该查询的性能有什么想法吗?
提前致谢
我有一个连接到oracle 10g数据库的bash脚本.
在第一步中,它使用以下命令从"config"文件中获取一些变量
. /path/to/my/configfile.ini
Run Code Online (Sandbox Code Playgroud)
在配置文件中有一些变量:
export USRID=myUser
export USRID_PASS=myPassword
export USR_PASS="$USRID/$USRID_PASS@myDatabase"
Run Code Online (Sandbox Code Playgroud)
然后它实际上使用以下命令通过sqlplus连接:
sqlplus -s $usr_pass
Run Code Online (Sandbox Code Playgroud)
抛开可怕的安全和设计问题(这个脚本已经存在了5年).这实际上是在我们的一个UNIX服务器中完成它的工作,而不是在另一个UNIX服务器中.
当我运行脚本时bash -x,我可以看到命令扩展为:
sqlplus -s myUser/myPassword@myDatabase
Run Code Online (Sandbox Code Playgroud)
...应该没问题(并且实际上在一台服务器上工作),但失败服务器中的响应是:
错误:ORA-01017:用户名/密码无效; 登录被拒绝
SP2-0306:无效选项.用法:CONN [ECT] [登录] [AS {SYSDBA | SYSOPER}]其中:: = [/] [@] | SP2-0306:无效选项.
我猜它必须用bash做更多的事情而不是oracle,但我不是bash专家.我缺少一些配置或细节吗?
编辑:
为了解决这个问题,我现在在第三个开发服务器上运行两个版本的脚本,并且在不同的测试中,如果我这样做,登录工作:
sqlplus -s $usrid/$usrid_pass@myDatabase
Run Code Online (Sandbox Code Playgroud)
但不是当我尝试:
sqlplus -s $usr_pass
Run Code Online (Sandbox Code Playgroud)
所以它有点烦人.
除此之外,我将不得不检查te配置文件同步过程...当我得到新的东西时,我会告诉你.谢谢大家.