美文网首页
mysql篇之mysql索引的使用

mysql篇之mysql索引的使用

作者: writeanewworld | 来源:发表于2019-11-14 19:49 被阅读0次

    1.背景

    • 熟悉下数据库索引的概念,在本地数据库新建一张用户信息表,写了一个接口,启用5个线程生成了5万的测试数据。
    • 写一个对外接口,通过userName来查询id

    2.userName字段索引添加对比

    未添加索引前用时16ms 添加索引后用时1ms
    • 相对比下,五万的数据整整提升了16倍的查询速度。
    image.png

    3.mysql索引类型normal,unique,full text的区别是什么?

    normal:表示普通索引
    unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique
    full textl: 表示 全文搜索的索引。 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。
    总结,索引的类别由建立索引的字段内容特性来决定,通常normal最常见。

    4.在实际操作过程中,应该选取表中哪些字段作为索引?

    为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引,有7大原则:
    1.选择唯一性索引
    2.为经常需要排序、分组和联合操作的字段建立索引
    3.为常作为查询条件的字段建立索引
    4.限制索引的数目
    5.尽量使用数据量少的索引
    6.尽量使用前缀来索引
    7.删除不再使用或者很少使用的索引

    5.MySQL: 索引以B树格式保存

    Memory存储引擎可以选择Hash或BTree索引,Hash索引只能用于=或<=>的等式比较。
    1、普通索引:
    create index on Tablename(列的列表)
    alter table TableName add index (列的列表)
    create table TableName([...], index [IndexName] (列的列表)
    2、唯一性索引:
    create unique index
    alter ... add unique
    主键:一种唯一性索引,必须指定为primary key
    3、全文索引:从3.23.23版开始支持全文索引和全文检索,FULLTEXT,
    可以在char、varchar或text类型的列上创建。
    4、单列索引、多列索引:
    多个单列索引与单个多列索引的查询效果不同,
    因为:
    执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。
    5、最左前缀(Leftmost Prefixing):多列索引,例如:fname_lname_age索引,以下的搜索条件MySQL都将使用
    fname_lname_age索引:firstname,lastname,age;firstname,lastname;firstname,其他情况将不使用。

    6.根据sql查询语句确定创建哪种类型的索引,如何优化查询 ?

    选择索引列:
     a.性能优化过程中,选择在哪个列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有
      两种类型的列:在where子句中出现的列,在join子句中出现的列。
     b.考虑列中值的分布,索引的列的基数越大,索引的效果越好。
     c.使用短索引,如果对字符串列进行索引,应该指定一个前缀长度,可节省大量索引空间,提升查询速度。
    d.利用最左前缀
    e.不要过度索引,只保持所需的索引。每个额外的索引都要占用额外的磁盘空间,并降低写操作的性能。
     在修改表的内容时,索引必须进行更新,有时可能需要重构,因此,索引越多,所花的时间越长。
     MySQL只对一下操作符才使用索引:<,<=,=,>,>=,between,in,以及某些时候的like(不以通配符%或_开头的情形)。

    相关文章

      网友评论

          本文标题:mysql篇之mysql索引的使用

          本文链接:https://www.haomeiwen.com/subject/rnorictx.html