MYSQL索引优化

17 篇文章 1 订阅
13 篇文章 0 订阅

一,索引的优点

1,大大减少了服务器需要扫描的数据量

2,帮助服务器避免排序和临时表

3,将随机IO编程顺序IO

 

二,索引的用处

 

1,快速查找匹配WHERE子句的行;

2,从consideration中消除行,可以在多个索引之间进行选择,mysql通常会使用找到最少行的索引;

3,如果表具有多列索引,则优化器可以使用索引的任何左前缀来查找行;

4,当表连接时,从其他表检索行数据;

5,查找特定索引列的min或max值;

6,如果排序或分组时可用索引的最左前缀上完成的,则对表进行排序和分组;

7,在某些情况下,可以优化查询以检索值而无需查询数据行。

三,索引分类

 

主键索引

唯一且非空

唯一索引

普通索引    *

全文索引 

varchar  char  一般不用

组合索引

 

 

四,面试技术名词

 

回表

普通了创建索引,普通索引叶子节点存储的并不是行的数据,放的是主键。

第一次查找普通列的B+Tree ,从中取到主键,然后再去查主键的B+Tree,最后去除整行数据。

回去主键B+Tree中找数据较回表。

 

覆盖索引

每次查询数据时每次需要查询主键,相当于查询了两次B+Tree,IO比较麻烦

SELECT  *  FROM , SELECT ID FROM 。 ID已经确定的情况下,不需要再去主键B+Tree中查找数据。组合索引中用的比较多,要尽量使用覆盖索引。例如:  in  ( select  id  from  where ...) 

SELECT *  FROM  EMP  WHERE NAME =1;

先查询NAME的B+Tree找到对应的ID,然后在查询ID的B+Tree找到对应的数据。

SELECT ID FROM  EMP  WHERE NAME =1;

先查询NAME的B+Tree找到对应的ID,不用回表直接返回ID,这个叫覆盖索引

最左匹配

多列创建索引

SELECT *  FROM  EMP  WHERE NAME =? AND AGE=?

索引生效

SELECT * FROM EMP  WHERE  AGE =?

索引失效

 

但要两个都要实现

索引也需要持久化,会占用磁盘空间,选择占用空间更小的方案

1   name  age          age        *

2   age  name         name

 

索引下推

用于组合索引  ,5.6版本后。

WHERE   name  like 'A%'  and age =20

 

 

 

索引合并

 

索引页合并 页分裂

...待持续

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL索引优化是提高查询性能的关键。下面是一些优化MySQL索引的方法: 1. 选择合适的索引 索引并非越多越好,需要根据实际情况选择合适的索引。通常来说,可以根据以下几个原则来选择索引: - 对经常查询的列进索引 - 对频繁用于WHERE、JOIN、ORDER BY和GROUP BY子句的列进索引 - 对选择性高的列进索引(即不同值越多的列) 2. 删除不必要的索引 过多的索引会占用过多的磁盘空间并降低写操作的性能,因此需要删除不必要的索引。可以使用如下语句查询所有的索引,并根据实际情况删除不必要的索引: ``` SHOW INDEX FROM table_name; ``` 3. 避免全表扫描 全表扫描是指MySQL查询时没有使用索引,而是扫描整个表的数据。全表扫描会导致查询效率低下,因此需要避免全表扫描。可以通过优化查询语句,例如添加索引、改变表结构等方式来避免全表扫描。 4. 使用覆盖索引 覆盖索引是指查询语句只需要使用索引中的列就可以返回查询结果,而不需要再去查询表中的数据。覆盖索引可以减少查询的IO操作,提高查询效率。 5. 定期维护索引 索引需要定期维护,包括优化查询语句、删除不必要的索引、重新构建索引等。可以使用MySQL自带的OPTIMIZE TABLE命令来优化表的索引和碎片,从而提高查询性能。 以上就是MySQL索引优化的一些方法,需要根据实际情况进选择和优化。需要注意的是,不同的索引优化策略对于不同的数据库环境和数据结构可能会有所不同,需要根据实际情况进调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值