mysql索引

前提:公司系统库和报表库不是同一个,报表在备库上

这里我主要介绍我们公司用的最多的非聚集索引
通常我建索引的方式,不要觉得low,只要目的达到就成,不需要装那个比
在这里插入图片描述

部署到正式库,这个地方有sql
在这里插入图片描述

索引类型
Normal:普通索引:最基本的索引,它没有任何限制,可以单个或者多个字段
Unique:唯一索引:与普通索引类似,不同的就是索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
Full Text:全文索引:基本不用就不介绍了,介绍也是百度的,没意义
索引方式
B-Tree
B-tree索引应用:=, >, >=, <, <=, 及 BETWEEN,对比值为常量且不以通配符起始的LIKE
Hash 索引特点
只能等值或者不等值匹配(= 或 <=> )但很快。使用此类查询的应用一般称之为key-value 存储。
无法使用HASH索引优化ORDER BY 操作。(这种类型的索引无法用于查询排序)
MySQL无法通过此索引估计范围条件间的数据行(优化器对于范围查询的优化(选择索引))。
只能使用全部的健来匹配查询(区别于B-tree 类型索引的最左前缀原则)
优化:

  1. 前模糊查询不能使用索引,后可以
    在这里插入图片描述

在这里插入图片描述

  1. 负向条件查询不能使用索引,可以优化为 in 查询。
    负向条件有:!=、<>、not in、not exists、not like 等
    在这里插入图片描述

3.联合索引最左前缀原则(又叫最左侧查询)
如果在(a,b,c,d)三个字段上建立联合索引,那么它能够加快 a | (a,b) | (a,b,c) | (a,b,c,d) 四组查询速度。
在这里插入图片描述

4.组合索引是,区分度越高越放在前面,比如订单号应该放在组合索引最前面
5.范围列可以用到索引(联合索引必须是最左前缀)。
范围条件有:<、<=、>、>=、between等。
在这里插入图片描述

下图的这个ORDER_TYPE用不到索引
在这里插入图片描述

6.把计算放到业务层而不是数据库层。
这样是用不到索引的
在这里插入图片描述

这样可以
在这里插入图片描述

7.不要强制转化类型,下面REMARK是varchar就不能命中索引
在这里插入图片描述

  1. 更新十分频繁、数据区分度不高的字段上不宜建立索引
    如订单类型,状态
  2. 业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引。
    唯一索引的效率明显高很多,但是我接触的项目建唯一索引的还是少
    10.多表join,连接字段要有索引
    最好不要超多三张表关联,如果是做报表需要,就弄个聚合表,让领导查看起来速度快一点
  3. 如果明确知道只有一条结果返回,limit 1 能够提高效率。
    其实这个不用说,肯定是你告诉数据库条件越多,他找到的数据越快,就跟送快递填写地址一样
    12

2.尽量指定索引,当同一个字段出现多个索引,尽量指定高效的索引,mysql优化器会计算出一个合适的索引,但是这个索引不一定是最好的

在这里插入图片描述

注:不要随便建索引,有些索引不仅没有优化查询效率,还降低了数据库性能
还有单表超过1000W就分表吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值