提高SQL性能

桑迪普

我需要从表A中获取表B中不存在的数据。任何人都可以告诉我,在以下所有查询中,哪种方式在运行时方面会更有效。

select col1 from A 
minus
select col1 from B

select col1 from A where not exists (select 1 from B where A.col1=B.col1)

select X from (select A.col1 as "X" ,B.col1 as "Y" from A left outer join B on A.col1=B.col1) where Y is null
贾斯汀·凯夫(Justin Cave)

对于任何形式的问题“什么是编写执行X的SQL语句的最有效方式”,答案始终是相同的-这取决于。

基于成本的优化器(CBO)考虑了有关所涉及表中数据的大量统计信息,以便决定使用哪种计划。根据您的数据,这三个查询完全有可能产生相同的查询计划(因此具有相同的性能)。您可能还会得到三个不同的计划。如果您获得不同的计划,则需要查看哪种计划对您的对象和硬件上的数据最有效。当然,随着数据的更改,CBO可以自由地为您的SQL语句提出不同的(希望更好)计划,因此“最佳”计划是一个不断发展的目标。今天可能效率最高的计划明天可能效率最高。

鉴于此,我的偏见始终是从最清楚地表达我要实现的逻辑的查询开始。编写尽可能可读的SQL,然后让优化器提出计划。如果某个特定查询成为瓶颈,并且您需要对其进行优化,那么一种选择是重写查询(如果优化器碰巧选择了一个效率较低的计划,而Oracle却选择了许多其他方式来影响查询计划,需要重写查询)。对我来说,MINUSEXISTS都是编写SQL语句的相对清晰的方法,因此我也不会反对。LEFT JOIN另一方面,让我感到不清楚的是-您故意在内部查询中查询数据,然后在另一层过滤掉数据-因此,我建议您在没有强有力的证据证明它实际上更有效的情况下,不建议使用在您的环境中高效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL提高性能

来自分类Dev

提高 SQL 查询性能

来自分类Dev

如何提高sql查询的性能

来自分类Dev

通过 SQL Server 提高 SQL 查询的性能

来自分类Dev

SQL子查询性能需要提高

来自分类Dev

如何提高SQL Server Select查询的性能?

来自分类Dev

提高Master Detail SQL代码性能

来自分类Dev

提高SQL Server中的Xquery性能

来自分类Dev

使用SQL Server索引提高性能

来自分类Dev

提高SQL Server插入大数据的性能

来自分类Dev

需要帮助来提高SQL DELETE性能

来自分类Dev

如何提高SQL Server Select查询的性能?

来自分类Dev

如何提高此SQL Server查询的性能?

来自分类Dev

如何提高SQL脚本性能

来自分类Dev

如何提高SQL Azure查询性能

来自分类Dev

通过使用排序提高sql查询性能?

来自分类Dev

如何提高这个 sql 查询的性能?

来自分类Dev

提高 PHP 文件中的 SQL 查询性能

来自分类Dev

提高简单的 SQL 选择性能

来自分类Dev

如何提高in sql表达式的性能

来自分类Dev

提高 SQL 查询选择性能

来自分类Dev

提高sql join count查询的性能

来自分类Dev

提高24小时返回相同结果的SQL查询的性能

来自分类Dev

通过实体框架提高SQL Server中的搜索性能

来自分类Dev

通过.NET提高对RDBMS(SQL)的事件源预测的性能

来自分类Dev

使用嵌套循环提高SQL查询的性能-PostgreSQL

来自分类Dev

如何在SQL Server中提高while循环插入性能?

来自分类Dev

如何简化下面的SQL并提高性能?

来自分类Dev

SQL查询需要提高的性能(1个表)