一名高级的Javaer,应该了解的 MYSQL 高级知识点( 四 )


  • 在经常需要搜索的列上创建索引,可以加快搜索的速度;
  • 在作为主键的列上创建索引,强制该列的唯一性和组织表中数据的排列结构;
  • 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
  • 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续 的;
  • 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快 排序查询时间;
  • 在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度 。
  • group by字段
索引原理:hash 结构:
Hash底层实现是由Hash表来实现的,是根据键值 <key,value> 存储数据的结构 。非常适合根据 key查找value值,也就是单个key查询,或者说等值查询 。
B+Tree结构
非叶子节点不存储data数据,只存储索引值,这样便于存储更多的索引值 叶子节点包含了所有的索引值和data数据 叶子节点用指针连接,提高区间的访问性能
一名高级的Javaer,应该了解的 MYSQL 高级知识点

文章插图
 
 EXPLAIN性能分析:
一名高级的Javaer,应该了解的 MYSQL 高级知识点

文章插图
 
id:id相同,执行顺序由上至下
id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行
一名高级的Javaer,应该了解的 MYSQL 高级知识点

文章插图
 
 select_type:simple : 简单的select查询,查询中不包含子查询或者UNION
primary : 查询中若包含任何复杂的子部分,最外层查询被标记
subquery : 在select或where列表中包含了子查询
一名高级的Javaer,应该了解的 MYSQL 高级知识点

文章插图
 
union : 如果第二个select出现在UNION之后,则被标记为UNION,如果union包含在from子句 的子查询中,外层select被标记为derived
一名高级的Javaer,应该了解的 MYSQL 高级知识点

文章插图
 
 type介绍:type显示的是连接类型,是较为重要的一个指标 。
下面给出各种连接类型,按照从最佳类型到最坏类型 进行排序:
system > const > eq_ref > ref > range > index > ALL
system : 表仅有一行 (等于系统表) 。这是const连接类型的一个特例,很少出现 。
const : 表示通过索引 一次就找到了, const用于比较 primary key 或者 unique 索引. 因为只匹配 一行数据,所以如果将主键 放在 where条件中, MySQL就能将该查询转换为一个常量
一名高级的Javaer,应该了解的 MYSQL 高级知识点

文章插图
 
eq_ref : 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配. 常见与主键或唯一索引扫描
一名高级的Javaer,应该了解的 MYSQL 高级知识点

文章插图
 
ref : 非唯一性索引扫描, 返回匹配某个单独值的所有行, 本质上也是一种索引访问, 它返回所有匹配 某个单独值的行, 这是比较常见连接类型.
一名高级的Javaer,应该了解的 MYSQL 高级知识点

文章插图
 
range : 只检索给定范围的行,使用一个索引来选择行 。
一名高级的Javaer,应该了解的 MYSQL 高级知识点

文章插图
 
index : 出现index 是 SQL 使用了索引, 但是没有通过索引进行过滤,一般是使用了索引进行排序分 组
一名高级的Javaer,应该了解的 MYSQL 高级知识点

文章插图
 
ALL : 对于每个来自于先前的表的行组合,进行完整的表扫描 。
一名高级的Javaer,应该了解的 MYSQL 高级知识点

文章插图
 
possible_keys:显示可能应用到这张表上的索引, 一个或者多个. 查询涉及到的字段上若存在索引, 则该索引将 被列出, 但不一定被查询实际使用
key :实际使用的索引
一名高级的Javaer,应该了解的 MYSQL 高级知识点

文章插图
 
key_len介绍:
表示索引中使用的字节数, 可以通过该列计算查询中使用索引的长度.
CREATE TABLE T1(a INT PRIMARY KEY,b INT NOT NULL,c INT DEFAULT NULL,d CHAR(10) NOT NULL);EXPLAIN SELECT * FROM T1 WHERE a > 1 AND b = 1;
一名高级的Javaer,应该了解的 MYSQL 高级知识点

文章插图
 
ALTER TABLE T1 ADD INDEX idx_b(b);


推荐阅读