假设我有一个长而昂贵的查询,充满了条件,搜索了大量行.我还有一个特殊的条件,比如公司id,这将大大限制需要搜索的行数,将其从数十万缩小到几十行.

我是否这样做对MySQL性能有任何影响:

 SELECT * FROM clients WHERE 
       (firstname LIKE :foo OR lastname LIKE :foo OR phone LIKE :foo) AND 
       (firstname LIKE :bar OR lastname LIKE :bar OR phone LIKE :bar) AND 
       company = :ugh

或者这个:

 SELECT * FROM clients WHERE 
       company = :ugh AND
       (firstname LIKE :foo OR lastname LIKE :foo OR phone LIKE :foo) AND 
       (firstname LIKE :bar OR lastname LIKE :bar OR phone LIKE :bar) 

推荐答案

不,订单不会有太大区别.当找到与条件匹配的行时,将为每一行判断整个条件(通过布尔逻辑组合的所有子条件).

一些智能数据库引擎会try 猜测条件的哪些部分可以更快地判断(例如,不使用内置函数的东西),并首先判断这些部分,然后判断更复杂(估计)的元素.这是由数据库引擎决定的,而不是SQL.

Mysql相关问答推荐

拒绝非超级用户访问停靠的MariaDB(超级用户工作)

对多个数据库运行UPDATE mySQL查询

递归查询意外地为一个字段返回空值

带有值分隔的MySQL分组不起作用

MySQL中如何对字符串进行算术运算?

MySQL 计数出现的百分比大于

MYSQL 8.0 - 从 INFORMATION_SCHEMA.COLUMNS 获取表列重新调整其他不相关的列

从 MySQL 8.0.12 升级到 8.0.32 时出错

生成直到 10 的平方数序列

如何在 Shopware 6 DAL 中实施 Haversine 公式?

创建 mySQL BEFORE/AFTER UPDATE 触发器

go&mysql&docker 拒绝连接

如何根据 R 中的价格范围将数据从一列复制到新列?

如何使用 express.js 和 react.js 删除连接表中的元素和关联元素

创建表时我的 SQL 语句有什么问题

如何按给定开始日期和结束日期的月份汇总?

如何在特定数据库中创建表?

如何存储重复日期牢记夏令时

外键可以引用非唯一索引吗?

如何从邮箱地址中 Select 域名