mysql where 条件先后_sql语句 where 后条件执行先后顺序
针对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 后条件执行先后顺序相关推荐
- mysql sql 备份表_SQL语句之备份表
SELECT INTO 语句:表示从一个表中选取数据,然后把数据插入另一个表中,常用来备份一张表 1.全表结构备份: SELECT * INTO new_table_name FROM old_tab ...
- mysql单引号转义_sql语句中使用单引号'作为转义字符
在SQL中,我们都知道单引号 ' 表示字符串的开始和结束符号,如: select * from students where name = '小明'; 但如果字符串里面有单引号时,应该怎么查询呢? 这 ...
- mysql表添加完整性约束_SQL语句——完整性约束
1.MySQL支持的完整性约束 a.主键约束 特点:唯一且非空 主键可以由一个字段组成,也可以由多个字段组成 如果主键由一个字段组成,既可以添加到列级,也可以添加到表级. 如果主键由多个字段组成,则只 ...
- sql语句 where 后条件执行顺序
曾经面试时.被问到过这个问题.结合网上的知识,整理如下: 针对mysql,其条件执行顺序是 从左往右,自上而下: 针对orcale,其条件执行顺序是从右往左,自下而上.
- mysql统计不及格科目_SQL语句 统计各个学生的不及格科目数量及不及格率 ,2条语句...
展开全部 --创建表 create table student ( 姓名 nvarchar(20), 数学32313133353236313431303231363533e58685e5aeb9313 ...
- mapper中查询语句 where 后条件全都可以为null的时候怎么办? 待解决
select from os_biz_sec_waf_instance obw where obw.CUSTOMER_ID=#{customerId} AND obw.IS_DELETE=#{isDe ...
- mysql 查询条件优先级_sql问题之where条件的优先级
在 SQL Server 中,WHERE 子句的表达式先后顺序没有影响.根据运算符的优先级进行运算,相同优先级的运算符两侧的表达式根据评估的代价多寡来运算,先运算代价小的,后运算代价大的. 如果楼主( ...
- mysql语言注释符号_sql语句中的注释符号
部署web应用 package it.cast.servlet; import java.io.IOException; import java.io.PrintWriter; import java ...
- mysql sql 除法运算_SQL语句怎么表示除法运算?
展开全部 select case when 除数 =0 then 0 else 被除数/除数 end 一. 基本概念 SQL语言,是结构化查询语言(Structured Query Language) ...
最新文章
- 【代码片段收集】Python解析AndroidManifest.xml
- 顾险峰: 庞加莱猜测的证明和应用
- python后端服务器_毕设里配合Python后端使用的所谓”CGI服务器“
- Linux基础优化方法(一)———优化命令提示符和yum源仓库
- 职责链模式应用——下机(机房重构知识点总结)
- power of two java_LeetCode算法题-Power Of Two(Java实现)
- Linux ubuntu对于cmake的版本更新
- easyui onclickrow 中获取列名_获取Chrome浏览器历史浏览记录实例
- opengl 关于glGenBuffers函数没有定义
- 4.1 Zend_Config
- OMS 订单管理系统
- Visual Studio开源库集成器Vcpkg全教程--利用Vcpkg轻松集成开源第三方库
- atmega328p引脚图_atmega328p中文手册
- STM单片机基础了解--野火
- 阿里巴巴重要开源项目汇总
- excel相乘再相加_excel现乘积再求和如何自动生成
- 关于nginx配置负载均衡,nginx.conf配置文件正确,一直跳出nginx欢迎界面
- 5G助推全球新经济变革,十万亿产业研讨盛会等你来
- 第一个项目的大概流程
- arcmap坐标点生成线和面
热门文章
- Python列表系列之统计计算
- python爬取有声小说网站实现自动下载实例
- mysql字符排序规则utf8mb4_0900_ai_ci修改为utf8_general_ci
- 优选商机+沃视获客+外呼系统+智能CRM
- Netty框架大体总结类图版
- basroot.dll丢失的解决方法_basroot.dll文件丢失修复教程
- python打印等腰三角形的性质_C++多继承有什么坏处,Java的接口为什么可以摈弃这些坏处?...
- 玩模拟大都市适合哪种java_我的世界模拟大都市mod下载
- 如何修改linux文件句柄数,Linux服务器修改文件句柄数和用户最大进程数限制
- Linux流量控制指南 (Traffic control HOWTO)