首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQLWHERE后跟着N多个OR条件会怎样。。。

某工具在运行过程,会产生下面的SQL进行查询,WHERE后跟了N多个条件mysql> select * from order_line where (ol_w_id = '1' and ol_d_id...这里说的N多个,是指总共有10000个OR条件,这条SQL的长度大概将近800KB。...相当于做了1万次索引列等值条件查询。 查询效率提升非常显著。 进一步优化 线上生产环境,各式各样的SQL层出不穷,这次可能是一万条OR条件,下次可能是其他的,是不能无限度增加数据库内存消耗的。...针对本案的SQL,更好的优化办法是找出这些OR条件的范围规律,并改写成一条更简单的SQL,类似下面这样: mysql> select * from order_line where ol_w_id =...最后再次提醒,WHERE条件后跟着N多个OR/AND条件的写法非常不可取,尤其是在用一些开发框架构造查询SQL时,尤其要注意规避这个问题,否则可能造成严重性能问题。

1.5K20
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL where条件探索

那么 select * from demo where age = 18需要回表吗? 需要。因为telephone不在次索引,还需通过主键去查找telephone的值。...而select name from demo where age = 18就不需要回表了,因为此索引包含name列的值。...explain select * from demo where name = 'mysql'; 就要一楼和二楼,三楼没钱盖了,用到了此联合索引,但是可能不完整,看key_len的值 有钱...mysql认为可能还用到了唯一索引,但实际并没有用到,还是只用到了联合索引, 再看key_len的长度和情况1一样,所以验证结论,where后只有第一个范围查 找才生效(如果第一个索引失效...范围查询+等值匹配 优先有索引的等值查询 where后是联合索引 mysql先去union的索引树找age等于1的,然后按范围去排序stu_id。

1.8K20

数据库on条件where条件的区别

数据库on条件where条件的区别 有需要互关的小伙伴,关注一下,有关必回关,争取今年认证早日拿到博客专家 标签:数据库 mysql> SELECT e.empno,ename,e.deptno,...3 | 王五 | 10 | 0 | +-------+-------+--------+------------+ 3 rows in set (0.07 sec) mysql...条件 -- 因为e.is_deleted = 0再过滤条件,所以不会出现再结果集中 mysql> SELECT e.empno,ename,e.deptno as edeptno,e.is_deleted...,右表用null填充 right会把右表中有on过滤后的临时表没有的添加进来,左表用null填充 故将王五添加进来,并且右表填充null +-------+-------+---------+----...-- empno=2因为不满足e.is_deleted = 0故不会连表,dept对应部分为null(只有完全满足连表条件才会连表) mysql> SELECT e.empno,ename,e.deptno

6410

MySQL数据库,SQL的where条件提取

接下来,让我们抛弃数据库的思想,直接思考这条SQL的⼏个关键性问题: 此SQL,覆盖索引idxt1bcd上的哪个范围? 起始范围:记录[2,2,2]是第⼀个需要检查的索引项。...提取规则:从索引的第⼀个键值开始,检查其在where条件是否存在,若存在并且条件是=、<=,则将对应条件加⼊到Index Last Key,继续提取索引的下⼀个键值,使⽤同样的提 取规则;若存在并且条件是...Index Filter的提取规则:同样从索引列的第⼀列开始,检查其在where条件是否存在: 若存在并且where条件仅为 =,则跳过第⼀列继续检查索引下⼀列,下⼀索引列采取与索引第⼀列同样的提取规则...;若where条件为 >=、>、=、>、<、<=...之外的条件,则将此条件以及其余where条件索引相关列全部加⼊到Index Filter之中;若第⼀列不包含查询条件,则将所有索引相关条件均加⼊到Index Filter之中。

2.3K10

MySQL复杂where条件分析

在《MySQL 常见语句加锁分析》一文,我们详细讲解了 SQL 语句的加锁原理并具体分析了大部分的简单 SQL 语句,但是实际业务场景 SQL 语句往往及其复杂,包含多个条件,此时就需要具体分析SQL...但是,今天我们讲一下具体 Where 语句的条件的拆分和使用,即复杂 Where 条件是如何生效的。...用何登成大神的原话,就是 给定一条SQL,where条件的每个子条件,在SQL执行的过程中有分别起着什么样的作用?...MySQL 会根据索引选择性等指标选择其中一个索引来使用,而另外一个没有被使用的 Where 条件就被当做普通的过滤条件,一般称被用到的索引称为 Index Key,而作为普通过滤的条件则被称为 Table...对于这个场景,MySQL 依然使用 ISBN > 'N0004' AND ISBN < 'N0007' 条件来确定 SQL 查询在索引的连续位置,但是 Author = 'Tom' 可以用来直接过滤索引

2.3K00

Mysql常用sql语句(8)- where 条件查询

测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 条件查询应该是作为测试平时用到最多的关键字了!!...它可以用来指定查询条件,减少不必要的查询时间 where的语法格式 WHERE 查询条件 五种查询条件 比较运算符、逻辑运算符 between and 关键字 is null 关键字 in、exist...and、&&:所有查询条件均满足才会被查询出来 or、||:满足任意一个查询条件就会被查询出来 xor:满足其中一个条件,并且不满足另一个条件时,才会被查询出来 这里有个重点,当运算符混合使用时,需要关注它们的优先级...,具体可参考这篇博文:(后面补充) 单一条件的查询栗子 一般单一条件查询用的就是比较运算符 select * from yyTest where id = 1; select * from yyTest...yyTest where age < 20; select * from yyTest where age <= 20; 多条件的查询栗子 多条件的查询都需要使用逻辑运算符,下面的栗子比较简单不展开描述

1.2K20

TP5 where数组查询(模糊查询--多个查询条件)

有查询条件就查询,多个查询条件,只要有查询,就增加一个查询条件 一、TP5.1版本 TP运算符 SQL运算符 例子 实际查询条件 eq = $map['id'] = array('eq',100); 等效于...or or $map['id'] = array(array('gt',3),array('lt',10), 'or'); (id > 3) OR (id < 10) xor(异或) xor 两个输入只有一个是...in',array('1','5','8')); exp 表达式 上表的 exp 不是一个运算符,而是一个综合表达式以支持更复杂的条件设置。...exp 不仅用于 where 条件,也可以用于数据更新,如: 官方查询语法:https://www.kancloud.cn/manual/thinkphp5/135182 版本 新增功能 5.0.9 比较运算增加闭包子查询支持...5.0.4 支持对同一个字段多次调用查询方法 查询表达式支持大部分的SQL查询语法,也是ThinkPHP查询语言的精髓,查询表达式的使用格式: where('字段名','表达式','查询条件');

6.1K21

MySQL存储过程where条件执行失败的问题

跟踪了半小时,发现是数据库的数据出错了,玩家下线保存角色数据的时候,居然将数据库内所有角色的数据都改了,然后赶紧去看存储过程,但是看不出存储过程的错误。...0,新建的宠物始终存不到数据库,当时也是调了很久,还以为是mysql的BUG,后来我改用replace into 语句解决了这个问题,以为是偶发,也没深究这个情况。...后面作为条件的变量名不能和字段名相同,而且这里是不区分大小写的。...但是作为update和insert into的参数确是可以的,mysql真的很坑爹呀。...最后回到最开始的问题,where后面是 RoleID = roleID; 所以执行失败了,只需要把参数roleID改下名,不和字段名RoleID同名即可。

2.2K20

带你读 MySQL 源码:where 条件怎么过滤记录?

源码分析系列的第 3 篇文章,我们来聊聊 MySQL 是怎么判断一条记录是否匹配 where 条件的。 正文 1....整体介绍 在源码where 条件会形成树状结构,示例 SQL 的 where 条件结构如下: 注意:这里的树状结构不是数据结构的树。...接下来,我们结合堆栈来看看 where 条件的实现流程: | > mysql_execute_command(THD*, bool) sql/sql_parse.cc:4688 | + > Sql_cmd_dml...如果对某一个或多个条件调用 item->val_bool() 的返回值是 false,就说明记录不匹配 and 连接的 N 个 where 条件。...在 MySQL ,NULL 会被特殊对待。NULL 和任何值(包含 NULL 本身)通过关系操作符(=、>、<、...)比较,得到的结果都是 NULL,这个结果就被认为是 UNKNOWN。

1.3K60

浅析Impalawhere条件执行顺序

基于以上测试结果,我萌生了这样一个想法,能不能通过手动调整where的过滤条件顺序,来让url和time的过滤先执行,最后再对info使用udf进行判断?...我们使用explain查看sql的执行计划,如下所示: 通过执行计划,我们可以看到,where的一系列过滤条件都被转换成了相应的predicates,由于day是时间分区列,可以直接进行过滤,因此不在这个...从图中我们可以看到,三个过滤条件的执行顺序依次是:info->time->url,使用udf的过滤条件被放到了第一个位置,这不是我们想要的结果,因此,我们修改SQLwhere条件顺序,如下所示: select...其中有一个whereClause_成员,就是where条件的各个过滤条件经过语法解析之后生成的结果,是一个Expr类,其UML图如下所示: 最终,where的各个过滤条件就会被转换成对应的Predicate...小结 通过以上的代码学习,我们终于知道了:为什么最开始的SQL,我们调整了where过滤条件的顺序,并不能改变执行计划的predicates顺序。

1.7K20

玩转Mysql系列 - 第25篇:sqlwhere条件数据库中提取与应用浅析

问题描述 一条SQL,在数据库是如何执行的呢?相信很多人都会对这个问题比较感兴趣。...通过本文的介绍,希望读者能够更好地理解查询条件对于SQL语句的影响;撰写出更为优质的SQL语句;更好地理解一些术语,例如:MySQL 5.6一个重要的优化——Index Condition Pushdown...本文接下来的内容,安排如下: 简单介绍关系型数据库数据的组织形式 给定一条SQL,如何提取其中的where条件 最后做一个小的总结 关系型数据库的数据组织 关系型数据库,数据组织涉及到两个最基本的结构...;若where条件为 >=、>、=、>、<、<=...结语 在读完、理解了以上内容之后,详细大家对于数据库如何提取where的查询条件,如何将where的查询条件提取为Index Key,Index Filter,Table Filter有了深刻的认识

1.6K20

MySQL 简单查询语句执行过程分析(四)WHERE 条件

本文是 MySQL 简单查询语句执行过程分析 6 篇的第 4 篇,第 1 ~ 3 篇请看这里: MySQL 简单查询语句执行过程分析(一)词法分析 & 语法分析 MySQL 简单查询语句执行过程分析(...二)查询准备阶段 MySQL 简单查询语句执行过程分析(三)从 InnoDB 读数据 今天我们分为 3 个部分来介绍,首先会看一下 where 条件在源码的结构是什么样的,对 where 条件结构有了初步了解之后...MySQL 多层 where 条件会形成一棵树状结构,每多一个层级,都需要额外的逻辑处理,执行效率上会有一点影响,所以在语法分析阶段,就会对 where 条件的树状结构层级进行简化,可以合并的层级就合并...条件比较 还是以上一节 where 条件结构的示例 SQL 为例来讲述本节的内容。...where 条件的值类型,然后进行比较。

2.4K30

数据库系列 | left join加上where条件咋了?

1SQL语句:left join后面加上where条件 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户 2SQL LEFT JOIN 关键字 LEFT...FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name **注释:**在某些数据库...city order_no status Huawei Beijing (null) (null) Google New York 107895 1 Apple London 77895 1 注意:条件不为真也会返回左表的记录...6小结 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。...where条件是在临时表生成好后,再对临时表进行过滤的条件 where 条件加上,已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉 过滤条件放在 where后面: 是先连接然生成临时查询结果

80010

thinkphp3.2框架where条件查询用法总结

本文实例讲述了thinkphp3.2框架where条件查询用法。...分享给大家供大家参考,具体如下: thinkphp3.2 where 条件查询 在连贯操作条件where的操作有时候自己很晕,所以整理下,有助于使用 查询条件 支持的表达式查询,tp不区分大小写 含义...TP运算符 SQL运算符 例子 实际查询条件 等于 EQ = $where[‘id’] = array(‘EQ’,’1′) id = 2 不等于 NEQ !...在枚举的值 in in $where[‘id’] = array(‘in’,array(‘1′,’2′,’5’)) where id in (‘1′,’2′,’3’) 不在枚举值 not in not...复合查询 相当于封装了新的查询条件在里面 $where['a'] = 5; $where['b'] = 6; $where['_logic'] = 'or'; sql:where a = 5 or b

1.8K30
领券