• sql索引


    1 什么是索引

    什么是索引(Index)。数据库中的索引,就好⽐⼀本书的目录,它可以帮我们快速进行特定 值的定位与查找,从而加快数据查询的效率。

    2 索引的类型

    • 主键索引
    • 非空索引
    • 唯一索引
    • 全文索引
    • 普通索引

    唯一索引:在创建唯一索引时要不能给具有相同的索引值。在⼀张数据表⾥可以有多个唯⼀索引。
    主键索引:在我们给一个字段设置主键的时候,它就会自动创建主键索引,用来确保每一个值都是唯一的。⼀张表⾥最多只有⼀个主键索引。
    聚集索引:我们在表中添加数据的顺序,与我们创建的索引键值相同,而且一个表中只能有一个聚集索引。
    普通索引:它的结构主要以B+树和哈希索引为主,主要是对数据表中的数据进行精确查找。
    全文索引:它的作用是搜索数据表中的字段是不是包含我们搜索的关键字,就像搜索引擎中的模糊查询。

    3 索引的好处

    提高数据的搜索速度
    加快表与表之间的连接速度
    在信息检索过程中,若使用分组及排序子句进行时,通过建立索引能有效的减少检索过程中所需的分组及排序时间,提高检索效率。

    4 索引的坏处

    在我们建立数据库的时候,需要花费的时间去建立和维护索引,而且随着数据量的增加,需要维护它的时间也会增加。
    在创建索引的时候会占用存储空间。
    在我们需要修改表中的数据时,索引还需要进行动态的维护,所以对数据库的维护带来了一定的麻烦。

    5 什么时候需要索引?什么时候又不需要索引?

    5-1 需要索引

    1.主键自动建立唯一索引
    2.频繁作为查询条件的字段应该创建索引
    3.查询中排序的字段创建索引将大大提高排序的速度(索引就是排序加快速查找
    4.查询中统计或者分组的字段;
    5.一般来说,在WHERE和JOIN中出现的列需要建立索引,但也不完全如此,因为MySQL只对<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引。刚才提到只有某些时候的LIKE才需建立索引。因为在以通配符%和_开头作查询时,MySQL不会使用索引。

    5-2 什么时候不需要?

    1. 频繁更新的字段不适合创建索引,因为每次更新不单单是更新记录,还会更新索引,保存索引文件
    2. where条件里用不到的字段,不创建索引;
    3. 表记录太少,不需要创建索引;
    4. 经常增删改的表;
      5.数据重复且分布平均的字段;些数据包含大量重复数据,因此他建立索引就没有太大的效果,例如性别字段,只有男女,不适合建立索引。

    6 索引的操作

    6-1 创建

    创建普通索引
    --CREATE INDEX index_name ON table_name(col_name);
    
    --创建唯一索引
    CREATE UNIQUE INDEX index_name ON table_name(col_name);
    
    --创建普通组合索引
    CREATE INDEX index_name ON table_name(col_name_1,col_name_2);
    
    --创建唯一组合索引CREATE UNIQUE INDEX index_name ON table_name(col_name_1,col_name_2);
    
    通过修改表结构来创建
    ALTER TABLE table_name ADD INDEX index_name(col_name);
    
    创建表时候直接创建
    CREATE TABLE table_name (
    ID INT NOT NULL,col_name VARCHAR (16) NOT NULL,
    INDEX index_name (col_name)
    );
    

    6-2 索引的删除

    --直接删除索引
    DROP INDEX index_name ON table_name;
    
    --修改表结构删除索引
    ALTER TABLE table_name DROP INDEX index_name;
    

    7 相关sql命令

    查看表结构
    desc 表名字
    
    查看表创建的sql
    show create table table_name;
    
    查看索引
    show index from  table_name;
    

    8 其它注意事项

     避免使用select *- count(1)或count(列) 代替 count(*)
    
    - 创建表时尽量时 char 代替 varchar
    
    - 表的字段顺序固定长度的字段优先
    
    - 组合索引代替多个单列索引(经常使用多个条件查询时)
    
    - 尽量使用短索引
    
    - 使用连接(JOIN)来代替子查询(Sub-Queries)- 连表时注意条件类型需一致- 索引散列值(重复多)不适合建索
    
    我对任何唾手而得,快速,出自本能,即兴,含混的事物没有信心。我相信缓慢,平和,细水长流的力量,踏实,冷静。我不相信缺乏自律精神和不自我建设,不努力,可以得到个人或集体的解放。
  • 相关阅读:
    作图与修图
    stringR包 字符串拼接,对字符串切分 替换 匹配提取 位置提取
    ggplot tools ggpubr arrange
    R 处理、可视化 多变量数据
    R 列表
    GATK jointcalling 不需要手动设置ploidy
    rsync 本地路径到挂盘路径 ;挂盘路径到本地
    linux 帐号便捷登陆
    科研路上,能往前走,就往前走,不犯完美主义错误, 警惕常见读博误区
    R 矩阵数组
  • 原文地址:https://www.cnblogs.com/hellosiyu/p/13684529.html
Copyright © 2020-2023  润新知