SQL查询条件里的OR性能问题研究

or的机制是顺序找所有条件,一旦有一个条件满足,后面的条件都不会执行。

CREATE  FUNCTION F_CUX_TEST_FUNC   RETURN NUMBER IS
  BEGIN
    dbms_output.put_line (1111);
    RETURN 1;
  END;
  select sysdate from dual where 1=1 OR  F_CUX_TEST_FUNC=1; 

执行上面sql后会发现,并不会输出1111.
由于or条件前面的1=1已经是true,所以后面的条件不会再执行。所以平常写查询语句时,如果where条件里面有多个or条件,尽量把查询速度快,容易满足的条件放在最前面,这样查询性能会提高一些

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在SQL语句中,使用IN或OR操作符可能会对性能产生影响。引用\[1\]中提到,查询的每一行记录都对应着一个单表,临时表也会对应一个记录。因此,如果一个查询中包含多个IN或OR操作符,每个操作符都会对应一个单独的查询,增加了查询的趟数,从而影响性能。此外,引用\[2\]中提到,MySQL优化器可能会对SQL语句进行重写,将原本复杂度为n*n的SQL语句优化为外连接的SQL语句,从而提高性能。而引用\[3\]中提到,联接操作是SQL中最基础、最常用的操作之一,相比于使用循环等方法,联接操作可以更高效地处理数据。因此,如果可能的话,建议使用联接操作而不是IN或OR操作符来提高SQL语句的性能。 #### 引用[.reference_title] - *1* *2* [SQL语句性能分析](https://blog.csdn.net/weixin_45690465/article/details/129484208)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [为什么说SQL语句中使用IN性能不高?](https://blog.csdn.net/leftfist/article/details/121081056)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值