Posts Tagged Oralce

关于Exists 里使用外面的表的索引问题

 

今天在做测试的时候,偶尔和同学聊起了这样一个语句

SELECT  someColumn

FROM Users t

WHERE

 

EXISTS(SELECT 1 FROM master_branch mb where mb.MasterCode = ’10000′ and mb.branchCode = t.CompanyCode)

因为Users 比较大,大概几百万条数据,所以很自然的将CompanyCode做了索引。

但是如果一运行的时候,发现其慢无比,用Explain Plan 看了一下,发现索引并没有被用到,而是直接扫描了全表

image

此处在找Users 的时候没有用到索引

经研究后发现,如果直接在exists 将表再次引用,再次做表连接的话,就ok了

将上面的SQL语句改为如下

SELECT  someColumn

FROM Users t

WHERE

 

EXISTS(SELECT 1 FROM master_branch,Users t1 mb where mb.MasterCode = ’10000′ and mb.branchCode = t1.CompanyCode)

image

可以看出,走的是索引了,这样,查询在0.1 秒之内就能完成了

Tags: , ,

有意思的oracle转义字符

众所周知oracle 的字符串需要用 “ ‘ ” (Single quote) 扩起来,

结果转义字符还是它,

结果我看着这个就觉得挺有意思的

image

注意看最底下的那个    我直接笑翻了   让我想起了当年C的变态试题

int i = 0;

printf("%d",(++i++)++);

当然,oracle也提供了一个类似C#中的@”"功能,只不过依然看起来很雷。。。

image

它是以  q’打头   加一个标识      以回标识和一个single quote 结尾,标识可以是大中小括号,感叹和或符号

只不过我变态的在想   如果我想用最后一种方案输出 |”|’ 咋处理。。。

另附,传说oracle 在学校还有个实验室。。。。

image

Tags: ,