针对mysql,其条件执行顺序是 从左往右,自上而下

针对SQL server、orcale,其条件执行顺序是从右往左,自下而上

1.mysql

where执行顺序是从左往右执行的,在数据量小的时候不用考虑,但数据量多的时候要考虑条件的先后顺序,此时应遵守一个原则:排除越多的条件放在第一个

在用MySQL查询数据库的时候,连接了很多个过滤条件,发现非常慢。例如:SELECT … WHERE p.languages_id=1 AND t.type=1 AND p.products_id IN (472,474),这样查询需要20多秒,虽然在各个字段上都建立了索引。用分析Explain SQL一分析,发现在第一次分析过程中就返回了几万条数据:WHERE p.languages_id=1 ,然后再依次根据条件缩小范围。

然后稍微改变一下WHERE字段的位置之后,速度就有了明显地提高:WHERE p.products_id IN (472,474) AND p.languages_id=1 AND t.type=1,这样第一次的过滤条件是p.products_id IN (472,474),它返回的结果只有不到10条,接下来还要根据其它的条件来过滤,自然在速度上有了较大的提升。经过实践发现,不要以为WHERE中的字段顺序无所谓,可以随便放在哪,应该尽可能地第一次就过滤掉大部分无用的数据,只返回最小范围的数据

最新发现:

大多时候mysql会自动根据sql语句做出优化,使用最优的sql语句进行查询

补充:

有时候mysql无法根据sql语句做出最优的优化顺序,所以还是要我们自己预判断出哪种过滤是最优,毕竟自己才最懂自己的数据

2.SQL server

由于解析是从BOTTOM到TOP进行的,因此应该先编写表联接,然后再执行WHERE子句的任何条件,并在联接完成后将筛选出最大记录的条件放在最后。

通过应用适当的过滤器(如果有)来减少参与联接的表中的行数。这将帮助优化器有效地使用缓存并帮助提高性能

将具有高容量的表放在SQL查询的右侧。

mysql where 条件先后_sql语句 where 后条件执行先后顺序相关推荐

  1. mysql sql 备份表_SQL语句之备份表

    SELECT INTO 语句:表示从一个表中选取数据,然后把数据插入另一个表中,常用来备份一张表 1.全表结构备份: SELECT * INTO new_table_name FROM old_tab ...

  2. mysql单引号转义_sql语句中使用单引号'作为转义字符

    在SQL中,我们都知道单引号 ' 表示字符串的开始和结束符号,如: select * from students where name = '小明'; 但如果字符串里面有单引号时,应该怎么查询呢? 这 ...

  3. mysql表添加完整性约束_SQL语句——完整性约束

    1.MySQL支持的完整性约束 a.主键约束 特点:唯一且非空 主键可以由一个字段组成,也可以由多个字段组成 如果主键由一个字段组成,既可以添加到列级,也可以添加到表级. 如果主键由多个字段组成,则只 ...

  4. sql语句 where 后条件执行顺序

    曾经面试时.被问到过这个问题.结合网上的知识,整理如下: 针对mysql,其条件执行顺序是 从左往右,自上而下: 针对orcale,其条件执行顺序是从右往左,自下而上.

  5. mysql统计不及格科目_SQL语句 统计各个学生的不及格科目数量及不及格率 ,2条语句...

    展开全部 --创建表 create table student ( 姓名 nvarchar(20), 数学32313133353236313431303231363533e58685e5aeb9313 ...

  6. mapper中查询语句 where 后条件全都可以为null的时候怎么办? 待解决

    select from os_biz_sec_waf_instance obw where obw.CUSTOMER_ID=#{customerId} AND obw.IS_DELETE=#{isDe ...

  7. mysql 查询条件优先级_sql问题之where条件的优先级

    在 SQL Server 中,WHERE 子句的表达式先后顺序没有影响.根据运算符的优先级进行运算,相同优先级的运算符两侧的表达式根据评估的代价多寡来运算,先运算代价小的,后运算代价大的. 如果楼主( ...

  8. mysql语言注释符号_sql语句中的注释符号

    部署web应用 package it.cast.servlet; import java.io.IOException; import java.io.PrintWriter; import java ...

  9. mysql sql 除法运算_SQL语句怎么表示除法运算?

    展开全部 select case when 除数 =0 then 0 else 被除数/除数 end 一. 基本概念 SQL语言,是结构化查询语言(Structured Query Language) ...

最新文章

  1. 【代码片段收集】Python解析AndroidManifest.xml
  2. 顾险峰: 庞加莱猜测的证明和应用
  3. python后端服务器_毕设里配合Python后端使用的所谓”CGI服务器“
  4. Linux基础优化方法(一)———优化命令提示符和yum源仓库
  5. 职责链模式应用——下机(机房重构知识点总结)
  6. power of two java_LeetCode算法题-Power Of Two(Java实现)
  7. Linux ubuntu对于cmake的版本更新
  8. easyui onclickrow 中获取列名_获取Chrome浏览器历史浏览记录实例
  9. opengl 关于glGenBuffers函数没有定义
  10. 4.1 Zend_Config
  11. OMS 订单管理系统
  12. Visual Studio开源库集成器Vcpkg全教程--利用Vcpkg轻松集成开源第三方库
  13. atmega328p引脚图_atmega328p中文手册
  14. STM单片机基础了解--野火
  15. 阿里巴巴重要开源项目汇总
  16. excel相乘再相加_excel现乘积再求和如何自动生成
  17. 关于nginx配置负载均衡,nginx.conf配置文件正确,一直跳出nginx欢迎界面
  18. 5G助推全球新经济变革,十万亿产业研讨盛会等你来
  19. 第一个项目的大概流程
  20. arcmap坐标点生成线和面

热门文章

  1. Python列表系列之统计计算
  2. python爬取有声小说网站实现自动下载实例
  3. mysql字符排序规则utf8mb4_0900_ai_ci修改为utf8_general_ci
  4. 优选商机+沃视获客+外呼系统+智能CRM
  5. Netty框架大体总结类图版
  6. basroot.dll丢失的解决方法_basroot.dll文件丢失修复教程
  7. python打印等腰三角形的性质_C++多继承有什么坏处,Java的接口为什么可以摈弃这些坏处?...
  8. 玩模拟大都市适合哪种java_我的世界模拟大都市mod下载
  9. 如何修改linux文件句柄数,Linux服务器修改文件句柄数和用户最大进程数限制
  10. Linux流量控制指南 (Traffic control HOWTO)