今天在做测试的时候,偶尔和同学聊起了这样一个语句
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 看了一下,发现索引并没有被用到,而是直接扫描了全表
此处在找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)
可以看出,走的是索引了,这样,查询在0.1 秒之内就能完成了