• mysql的索引和执行计划


    一、mysql的索引

      索引是帮助mysql高效获取数据的数据结构。本质:索引是数据结构

      1:索引分类

        普通索引:一个索引只包含单个列,一个表可以有多个单列索引。

        唯一索引:索引列的值必须唯一 ,但允许有空值。

        复合索引:一个索引包含多个列。

        聚集索引:并不是一种单独的索引类型,而是一种数据存储方式。innodb磁盘存储,.ibd数据和索引放在一个文件夹下。

        非聚集索引:不是聚集索引的,就是非聚集索引。

      2:语法

        查看索引        show index from table;

        创建索引  

          create [unique] index indexname on table(columnname(length));

          alter table 表名 add [unique] index [indexname] on (columnname(length));  

        删除索引  drop index [indexName] on table;

      3:适合建索引

        某一列相对来说唯一

        经常用来查询显示的列

        经常用来关联的列 where 条件中用到的列,以及join on 用到的列

    二、mysql的执行计划

      使用explan关键字可以知道mysql是如何处理SQL语句的。 

      id:相同,都不相同,不全部相同。

        相同:获取select的执行顺序。执行顺序由上到下。

        都不相同:如果是子查询,id序号会递增,id值越大优先级越高,越先被执行。 

        不全部相同:id相同的认为一组,从上往下顺序执行。在所有组中,id值越大,优先级越高,越先被执行。

      select_type:查询的类型

        simple:简单的SQL语句,不包含union或者子查询。 

        primary:查询中包含任何的子查询,最外层查询被标记。

        subquery:在select和where中,查询的任何子查询。

        derived:在from列表中包含子查询会被标记为derived,mysql会递归执行这些子查询,把结果放到临时表。

        union:若第二个select出现在union之后,则标记为UNION;若UNION包含在from子句的子查询中,外层select将被标记为derived。

        union result:从union表获取结果的select。

      table:查询来自那张表

      type:访问的类型,重要的一个指标,结果从最好到最坏。

        system》const》eq_ref>ref>range>index>all,最好达到ref或者range

        system:表中只有一条记录(等于系统表),这是const类型的特例,平时不会出现,这个可以忽略不计。

        const:表示通过索引一次就找到了。用于primary或unique索引。因为只匹配一行数据。

        eq_ref:唯一索引扫描,对于每个索引建,表中只有一条记录匹配。常见于主键或唯一索引扫描。 

        ref:非唯一索引扫描,返回匹配某个单独值的所有行。

        rang:只检索给定范围内的行,使用一个索引来选择行。key列显示使用那个索引,一般就是在你的where语句中出现between、<、>、in查询中。

        index:当查询的结果全为索引列的时候。也是全表扫描的一种。只不过扫描的全部索引。

        all:全表扫描。

        注:当出现index和all的时候,就应该去优化SQL语句。

      key:实际所用的索引。如果为null,则没有使用索引。

      possible_key:可能用到的key。possible_key有数据,但是不一定会使用key。key有数据,但是不一定会使用possible_key。这两者比一定都同时出现。

      key_len:表示索引使用的字节数,通过该列查询使用索引的长度。在不损失精确性的情况下,长度越短越好。

      ref:显示索引的哪一列被使用了,如果可能得话,是一个常数。

      rows:根据表的以及索引选用的情况,大致估算出需要读取的行数。扫描的行数越少越好。

      extra:包含不适合在其他列中显示,但重要的额外信息。

  • 相关阅读:
    斗破苍穹python爬虫
    卷积神经网络
    爬虫进阶
    深度学习TensorFlow
    python爬虫
    面向对象技术分析、设计、实现
    软件过程模型及其优缺点
    数据结构找最优解
    面向对象技术多态
    面向对象技术UML
  • 原文地址:https://www.cnblogs.com/orange-time/p/10595619.html
Copyright © 2020-2023  润新知