共计 1782 个字符,预计需要花费 5 分钟才能阅读完成。
引言
那应用过数据库的人大部分都晓得,like 和 = 号在性能上的相同点和不同点,那我在这里简略的总结下:1,不同点:like 能够用作含糊查问,而 '=' 不反对此性能;如上面的例子,查问 info 表中字段 id 第一个字母为 1 的数据:
select * from info where id like '1%';
2,相同点:like 和 "=" 都能够进行准确查问,比方上面的例子,从后果上看,都是查问 info 表中字段 id 等于 '12345' 的后果:
select * from info where id like '12345';
以上就是返回后果中,like 和 '=' 中的雷同和不同点。那好奇的小伙伴可能就要问了,那执行过程呢?mysql 不论是遇到 like 还是 '=' 时的执行过程也都是一样的么?
没错,事件不能只看外表,如果你仔细钻研,就会发现其实 like 和等于号 '=' 并不是那么简略,上面咱们将具体的剖析他们两者的真正区别~~~
注释
首先,咱们来介绍一下 mysql 中的 explain 关键字;explain 是执行打算的意思,即通过该命令查看这条 sql 是如何执行的。
应用办法也很简略,即 explain + sql 语句
,例如:
explain select * from info where id like '12345';
那咱们来应用 explain 测试一下 like 和 = 下的查问状况,首先咱们来测试一下为索引的字段:
EXPLAIN SELECT
*
FROM
crms_customer
WHERE
id = '7cf79d7c8a3a4f94b5373b3ec392e32d';
而当初咱们把 ”=” 换成 like 试一下:
EXPLAIN SELECT
*
FROM
crms_customer
WHERE
id LIKE '7cf79d7c8a3a4f94b5373b3ec392e32d';
小伙伴通过比照能够看到两条返回后果的 type 字段和 Extra 字段中的数据有所不同,那为什么不同,他们所代表的含意是什么呢?
type 字段
type 字段是一个可选值,这些值的性能从低到高的排序如下:
type | 阐明 |
---|---|
SYSTEM | 零碎,表仅有一行 (= 零碎表)。这是 const 联接类型的一个特例 |
CONST | 常量,表最多有一个匹配行, 因为仅有一行, 在这行的列值可被优化器残余局部认为是常数,const 表很快, 因为它们只读取一次 |
EQ_REF | 搜寻时应用 primary key 或 unique 类型 |
REF | 依据索引查找一个或多个值 |
INDEX_MERGE | 合并索引,应用多个单列索引搜寻 |
RANGE | 对索引列进行范畴查找 |
index | 全索引表扫描 |
ALL | 全数据表扫描 |
依据表格能够显著看出,其中 const 是常量查找,而 RANGE 是对索引列进行范畴查找,所以性能也就很显著的体现了进去。
那应用 like 查问时,Extra 字段代表什么呢?Extra 字段中的 Using where,又代表什么?
Extra 字段
1,Extra 字段是 Explain 输入中也很重要的列,所代表着 MySQL 查问优化器执行查问的过程中对查问打算的重要补充信息。
2,Extra 字段中的 Using where 意味着 mysql 服务器将在存储引擎检索行后再进行过滤。所以比起应用应用 ’=’ 又多了一步查找过程。
显然通过以上的总结咱们能够得出结论:当咱们应用索引字段进行条件查问时,’=’ 的性能要比 like 快。
是不是认为到这里就完结了呢?
然而并没有
有的小伙伴该问了那非索引字段呢?
对的,咱们上面持续测试非索引字段
EXPLAIN SELECT
*
FROM
crms_customer
WHERE
customer_name = '张飞';
-----------------------------------
EXPLAIN SELECT
*
FROM
crms_customer
WHERE
customer_name LIKE '张飞';
除了 ”=” 和 like 同样的两条语句,让咱们运行一下:
“=”:
like:
能够看出当非索引字段时 like 和 ”=” 是一样的,性能上也没有差异。
(当然,explain 中还有很多其余字段,后续我会一一给小伙伴们解说的。)
论断
通过咱们的不懈努力,能够失去论断:当 like 和 ”=” 在应用非索引字段查问时,他们的性能是一样的;而在应用索引字段时,因为 ”=” 是间接命中索引的,只读取一次,而 like 须要进行范畴查问,所以 ”=” 要比 like 性能好一些。~~~~