试图找出表格X中是否使用了id2。使用'count'的最简单方法:
SELECT COUNT(*) FROM X WHERE id1 = :1 AND id2 = :2 ;
如果 X是包含超过90,000,000个数据的大型表,则上述查询会对性能产生严重影响。有没有更好的性能替代品?
注意:两列都在表X中有索引。
答案 0 :(得分:3)
如果您使用:
SELECT COUNT(*)
FROM X
WHERE id1 = :1 AND
id2 = :2 AND
ROWNUM = 1;
如果没有找到行,则会得到0,如果找到一行,则得到1。
查询将在找到第一行时停止执行,如果没有找到行,则不必处理NO_DATA_FOUND异常。
你可以在这两个列上使用复合索引,因为组合索引可能效率不高。但是,如果其中一个谓词非常有选择性,那么可以有效地跳过索引组合并访问表以检查其他列的值。
答案 1 :(得分:2)
SELECT * FROM X WHERE id1 = :1 AND id2 = :2 LIMIT 1;
答案 2 :(得分:2)
此条件只需要存在一行,请尝试:
select 1 from dual where EXISTS(SELECT id1 FROM X WHERE id1 = :1 AND id2 = :2)
答案 3 :(得分:0)
可能是该表在正在进行的时间/正在进行的交易中使用。您可以添加WITH(NOLOCK)并查看是否可以改善任何内容。