• mysql教程(九) 索引详解


    1、准备工作

      先创建具有百万量的数据表 转自:https://blog.csdn.net/mysqltop/article/details/105230327

    #建测试表
    drop table if exists t;
    CREATE TABLE t (
                    id int NOT NULL AUTO_INCREMENT PRIMARY KEY comment '自增主键', 
                    dept tinyint not null comment '部门id',
                    name varchar(30) comment '用户名称',
                    create_time datetime not null comment '注册时间', 
                    last_login_time datetime comment '最后登录时间'
                   ) comment '测试表';
     
    #手工插入第一条测试数据,后面数据会根据这条数据作为基础生成
    insert into t values(1,1,'user_1', '2018-01-01 00:00:00', '2018-03-01 12:00:00');
    #初始化序列变量
    set @i=1;
     
     
    #==================此处拷贝反复执行,直接符合预想的数据量===================
    #执行20次即2的20次方=1048576 条记录
    #执行23次即2的23次方=8388608 条记录
    #执行24次即2的24次方=16777216 条记录
    #......
    insert into t(dept, name, create_time, last_login_time) 
    select left(rand()*10,1) as dept,   #随机生成1~10的整数
            concat('user_',@i:=@i+1),   #按序列生成不同的name
            date_add(create_time,interval +@i*cast(rand()*100 as signed) SECOND), #生成有时间大顺序随机注册时间
            date_add(date_add(create_time,interval +@i*cast(rand()*100 as signed) SECOND), interval + cast(rand()*1000000 as signed) SECOND) #生成有时间大顺序的随机的最后登录时间
    from t;
    select count(1) from t;

    2、在mysql中如何查看语句执行时间

      语句:show profiles;

      如果执行上述语句不能查看,则需要查看是否开启:show variables like "%pro%";

      

      开启:set profiling=1;

      关闭:set profiling=0;

    3、为什么使用索引

      主要是为了提高查询效率。没有索引,MySQL不得不首先以第一条记录开始,然后读完整个表直到它找出相关的行。表越大,花费时间越多。

      上图:红色为创建索引后的查询时间,绿色为删除索引后同一条语句的查询时间。

    4、什么时候使用索引

      ● 表中该字段中的数据量庞大

      ● 经常被检索,经常出现在where子句中的字段

      ● 经常被DML操作的字段不建议添加索引

    5、创建索引

      语句:create index 索引名 on 表名(字段名)

           alter table 表名 add index 索引名(字段)

      示例:create index myindex on t(name);

            alter table t add index(name);

       注:主键,unique 都会默认的添加索引

    6、查看索引

      show index from 表名;

     7、删除索引

      drop index 索引名 ON 表名;
      alter table 表名 drop index 索引名;

          

  • 相关阅读:
    原生js实现购物车相关功能
    js+css让背景图片动起来
    彻底搞清楚rgba与opacity/filter的区别
    国家对五险一金的详细缴纳说明
    原生js+css实现二级伸缩菜单
    原生js实现table表格的各行变色功能
    原生js实现二级导航功能
    app下载文件,保存文件,展示文件(以图片文件为例)
    实现锚点跳转的两种方式及注意事项
    vue刷新页面及注意事项
  • 原文地址:https://www.cnblogs.com/wnnstudy/p/14120569.html
Copyright © 2020-2023  润新知