首页 > 网站 > 帮助中心 > 正文

你的like语句为什么没索引详解

2024-07-09 22:47:55
字体:
来源:转载
供稿:网友

前言

本文旨在用最通俗的语言讲述最枯燥的基本知识

这个话题比较有意思。昨天中午吃完饭间突然有个同事蹦出了一句:“like有索引吗?”,我顺口就说没有,另一个同事反驳说有啊,还有些同事说看情况的有,这下有点懵逼了,都不知道那种说法是正确的,于是决定花了个半小时来研究验证这个问题,终于得到答案。

怎么验证的呢?

坊间有传言:MySQL性能优化有个神器,叫做explain,它可以对select语句进行分析并且输出详细的select执行过程的详细信息,让开发者从这些信息中获得优化的思路。

下面来讲讲这个MySQL提供的explain命令:

语法:explain SQL语句例如:

1explain select * from user where id=1

执行完毕之后,它的输出有以下字段:

  id
  select_type
  table
  partitions
  type
  possible_keys
  key
  key_len
  ref
  rows
  Extra

要想知道explain命名怎么使用,就必须把这些字段搞清楚

1. id

SELECT查询的标识符, 每个SELECT语句都会自动分配一个唯一的标识符

2. select_type

每个select查询字句的类型,具体类型以及对应作用如下表:

类型名 解释
SIMPLE 简单SELECT,不使用UNION或子查询等
PRIMARY 查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY
UNION UNION中的第二个或后面的SELECT语句
DEPENDENT UNION UNION中的第二个或后面的SELECT语句,取决于外面的查询
UNION RESULT UNION的结果
SUBQUERY 子查询中的第一个SELECT
DEPENDENT SUBQUERY 子查询中的第一个SELECT,取决于外面的查询
DERIVED 派生表的SELECT, FROM子句的子查询
UNCACHEABLE SUBQUERY 一个子查询的结果不能被缓存,必须重新评估外链接的第一行

3. table

显示这一行的数据是查哪张表的,不过有时短路显示的不是真实的表名。

4. partitions

匹配的分区(这个目前用处不大)

5. type

访问类型,表示MySQL在表中找到所需行的方式,对应的值和解释如下:

类型名 优级别 解释
system 1
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表