当前位置: 首页 > 面试题库 >

使用JOIN而不是WHERE进行过滤

宰子琪
2023-03-14
问题内容

在SQL(MSSQL,Oracle等)中,在联接表时,向JOIN语句添加过滤器而不是在WHERE子句中添加过滤器有什么好处?

IE

SELECT * FROM X INNER JOIN Y ON X.A = Y.A WHERE X.B = 'SOMETHING'

相对

SELECT * FROM X INNER JOIN Y ON X.A = Y.A AND X.B = 'SOMETHING'

我意识到这并非在所有情况下都有效,但是我注意到在某些情况下,通过将过滤器条件放在JOIN语句中似乎可以提高性能。但是,由于它是JOIN语句的一部分,因此也会使它的行为有些奇怪。

有什么想法吗?


问题答案:

对于INNER JOIN查询,这些过滤器的性能特征将取决于许多因素-表的大小,索引,查询的选择性以及特定于在其上执行查询的RDBMS的其他因素。

LEFT和中RIGHT OUTER JOIN,过滤器的位置比至关重要INNER JOIN,因为它影响在执行连接之前(JOIN子句)还是之后(WHERE子句)应用它。



 类似资料:
  • 问题内容: 因此,我的数据库包含项目清单: 我还有第二张表,该表将一些标签与项目相关联: 一个项目可能具有与之关联的几个标签(例如5、20和25),因此对于标签表中的每个标签值都有一行。 我希望能够确定某个特定标签是否与某个商品相关联,而又不会丢失所有其他标签数据。例如, 不起作用,因为它消除了包含其他标记值的行(如果tag.id为27,则它不能是特定行上的任何其他值)。 为了解决这个问题,我想使

  • 问题内容: 我有一个使用序列化列的模型: 有没有办法使此序列化使用JSON而不是YAML? 问题答案: 在Rails 3.1中,您可以 希望能有所帮助

  • 问题内容: 以上是我的html。我想改为通过Vue呈现代码。 上面是我的Vue代码,Jinja提出了一个例外,即“任务”未定义,我希望的是Vue而不是Jinja呈现的html代码,我知道可以在Laravel中使用以下代码来完成: 由于我是Jinja的新手,所以有人可以帮助我吗? 问题答案: 另一个选择是重新定义Vue.js使用的分隔符。如果你有很多现有的模板代码,并且希望开始将Vue.js功能添加

  • 我以前有一个类似于Rails的查询: 它生成sql查询,如下所示: 现在我想将其更改为使用而不是。我创建了这个: 现在,当我使用空数组时,我得到以下错误:

  • 问题内容: 使用 DispatcherServlet时 ,出现 java.lang.IllegalStateException:未找到WebApplicationContext:未注册ContextLoaderListener吗? 使用 DelegatingFilterProxy 过滤器时出错。因此,我删除了 DispatcherServlet ,现在改用 ContextLoaderListene

  • 在Hazelcast中,是否可以基于键的属性而不是值来查询IMap?所有Hazelcast示例都显示了按值查询。E、 例如,对于具有字符串键的员工地图: 然后,典型的搜索谓词根据员工属性(姓名、薪资等)进行搜索。但我的案例使用了更复杂的密钥,例如: 因此,如果数据属性具有以下字段: 我想编写一个可以通过键进行查询的谓词,以返回适当的DataValue对象。这不起作用: 我可以按照这个答案中的建议推