Mysql 索引的选择:

如何加索引
左连接给右表加索引,右连接给左表加索引。以小表驱动大表。
1.全值匹配我最爱(覆盖索引)
2.最佳左前缀法则:(复合索引,查询从索引的最左前列开始且不跳过索引中的列)
3.不再索引列上做任何操作(计算、函数、(自动或手动)类型转换),会导致索引失效转向全表扫描,不要在where后做逻辑运算,也不要做函数计算,这邪恶都会导致索引失效。
4.范围之后全失效(<>between and)后面的索引列会失效
5.尽量使用覆盖索引(查询列和索引列一致)就减少select *
6.mysql使用不等于(!=或<>)的时候会导致全表扫描
7.is null,is not null 也无法使用索引
8.使用like %xx%时若要索引不失效应用覆盖索引 注:非覆盖索引时%xx%、%xx、xx%三个中xx%不会失效其余两个会失效,

        总结  百分号在前面是不会使用索引的。
9.字符串不加单引号索引失效
10.少用or 会导致失效

id列

select查询的序号,标记着select查询的顺序

  • id相同,由上到下依次执行
  • id不同,值越大优先级越高,越先执行
  • id为null,最后执行

select_type列

查询中每个select子句的类型(简单或复杂)

  • simple:简单类型,不包含子查询和union
  • primary:复杂查询的最外面一层select查询
  • subquery:包含在select中的子查询(不在from子句中)
  • derived:from子句中的子查询,mysql会生成一个临时派生表

table列

        explain的一行子查询正在访问的表名

        当From后有子查询时,子查询为派生的临时表,表名为<deriver+id>值【deriver3】

        当有union时,select_type为union_result的table列值为<union1,2,4>,表示行id为1、2、4的子句参与了union

type列

        访问类型,表示访问类型,标识着查找行的大概范围

        依次从最优到最差分别为:NULL > system > const > eq_ref > ref > range > index > ALL

        一般得保证达到range或者ref级别,就可以了就不用再优化了

  • NULL:表示执行过程中不需要访问索引或者表就能得到结果

  • const :根据主键id或唯一索引查询最多只有一条记录

  • system:const的一个变种,查询的表中只有一条记录

  • eq_ref:根据主键id或唯一索引进行关联查询

  • ref:使用普通索引或唯一索引的部分索引关联查询

  • range:范围查找,between、in、>、<、>=、<=等,检索出给定范围的行

  • index:全索引扫描

  • ALL:未使用索引,全表扫描

possible_keys列
        可能用到的索引key列表,但不一定使用到。如果值为NULL,则代表该查看语句没有可使用的索引

key列

        查询中实际使用了的索引名字,如果值为NULL表示没有该查询并没有使用到索引

key_len列

        mysql在索引中使用的字节长度,可以根据字节长度算出来使用到的索引列

  • 字符串
    • char(n):n字节长度
    • varchar(n):2字节存储字符串长度,如果是utf-8,则长度 3n + 2
  • 数值类型
    • tinyint:1字节
    • smallint:2字节
    • int:4字节
    • bigint:8字节
  • 时间类型
    • date:3字节
    • timestamp:4字节
    • datetime:8字节
  • 如果字段允许为 NULL,需要1字节记录是否为NULL

ref列

        显示了在key列中的索引中,表查找值用到的是常量还是字段

        const:常量值

        test.fa.film_id:test库别名为fa表的film_id字段

rows列

        MySQL预估检索的行数,并不是结果集的真实行数

Extra列

        扩展额外的信息列

  • Using index:使用了覆盖索引(覆盖索引:查询列要被所建的索引覆盖。索引的字段不只包含查询列,还包含查询条件、排序等。
  • Using where: where条件查询
  • Using index condition: where 条件查询使用了索引数据
  • Using temporary:使用临时表,需要优化
  • Using filesort:使用外部排序,而非索引排序
  • Select tables optimized away:使用聚合函数访问索引字段


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值