• Mysql --- 索引


    目录

    索引的介绍

    数据库中专门用于帮助用户快速查找数据的一种数据结构. 类似于字典中的目录,查找字典内容时

    可以根据目录查找到数据的存放位置,然后获取

    索引的作用

    约束和加速查找

    常见的索引有哪几种

    - 普通索引

    - 唯一索引

    - 主键索引

    - 联合索引 (多列)

        -联合主键索引

        -联合唯一索引

        -联合普通索引

    无索引和有索引的区别是什么?

      无索引的话 从前往后一条一条查询

      有索引 : 创建索引的本质, 就是创建额外的文件,(某种格式存储,查询的时候,先去格外的文件找,定好位置,然后再去原始表中直接查询,但是创建索引越多,会对硬盘也是有损耗)

    那建立索引的目的是什么?

      1,额外的文件保存特殊的数据结构

      2,查询快,但是插入更新删除依然慢

      3,创建索引后,必须命中索引才能有效

    hash索引和BTree索引

      1,hash类型的索引 : 查询单条快, 范围查询慢

      2,btree类型的索引 : b+树,层数越多,数据量指数级增长

    普通索引

    作用:  仅有一个加速查找

    create table userinfo(
                       nid int not null auto_increment primary key,
                       name varchar(32) not null,
                       email varchar(64) not null,
                       index ix_name(name)
                   );
    创建表 + 普通索引

    普通索引:

      create index 索引的名字 on 表名(列名)

    删除索引:

      drop index 索引的名字 on 表名

    查看索引:

      show index from 表名

    唯一索引

    唯一索引有两个功能:加速查找和唯一约束

    create table userinfo(
                       id int not null auto_increment primary key,
                       name varchar(32) not null,
                       email varchar(64) not null,
                       unique  index  ix_name(name)
                   );
    创建表+唯一索引

    唯一索引:

      create unique index 索引名 on 表名

    删除唯一索引:

      drop index 索引名 on 表名;

    主键索引

    主键索引有两个功能 : 加速查找和唯一约束

    create table userinfo(
    
                       id int not null auto_increment primary key,
                       name varchar(32) not null,
                       email varchar(64) not null,
                       unique  index  ix_name(name)
               )
              or
    
               create table userinfo(
    
                       id int not null auto_increment,
                       name varchar(32) not null,
                       email varchar(64) not null,
                       primary key(nid),
                       unique  index  ix_name(name)
             )
    
    创建表+主键索引
    创建表 + 主键索引

    主键索引:

      alter table 表名 add primary key(列名);

    删除主键索引:

      alter table 表名 drop primary key;

      alter table 表名 modify 列名 int,drop primary key;

    组合索引

    组合索引是将n个列组合成一个索引

    联合普通索引:

        create index 索引名 on 表名(列名1,列名2);

    索引名词

    覆盖索引:  在索引文件中直接获取数据

    例:  select name from userinfo where name ="afan1000000";

    索引合并: 把多个单列索引合并成使用

    例: select * from userinfo where name="afan1000000" and id="1313131";

    什么是最左前缀呢?

    最左前缀匹配:
            create index ix_name_email on userinfo(name,email);
                     select * from userinfo where name = 'alex';
                     select * from userinfo where name = 'alex' and email='alex@oldBody';
    
                     select * from userinfo where  email='alex@oldBody';
    
                 如果使用组合索引如上,name和email组合索引之后,查询
                 (1)name和email ---使用索引
                 (2)name        ---使用索引
                 (3)email       ---不适用索引
                  对于同时搜索n个条件时,组合索引的性能好于多个单列索引
            ******组合索引的性能>索引合并的性能*********

    索引的注意事项

      1.避免使用select * 

      2. count(1) 或 count(列) 代替 count(*)

      3.创建表时尽量使用char代替varchar

      4.表的字段顺序固定长度的字段优先

      5.组合索引代替多个单列索引(经常使用多个条件查询时)

      6.尽量使用短索引(create index ix_title on tb(title(16)); reshuffle的数据类型 text类型

      7.使用连接(join) 来代替子查询

      8.连表时注意条件类型需一致

      9.索引散列(重复少) 不适用于建索引,例如:性别不合适



  • 相关阅读:
    vmwear 及docker
    vue相关
    vue demo
    线程的死锁
    让出和守护线程
    join加入线程
    线程的优先级
    线程间的通信
    synchronized关键字的使用
    线程的并发
  • 原文地址:https://www.cnblogs.com/liuafan/p/9567383.html
Copyright © 2020-2023  润新知