美文网首页
MySQL索引的使用规则和设计原则

MySQL索引的使用规则和设计原则

作者: 萧修 | 来源:发表于2023-03-30 11:42 被阅读0次

    SQL提示

    user 建议其使用哪个索引

    select *from tb user index(xx) where pro = '';
    

    ognore 忽略其索引使用

    select *from tb agnore index(xx) where pro = '';
    

    force 强制其使用索引

    select * from tb force index(xx) where pro = '';
    

    覆盖索引和回表查询

    覆盖索引

    尽量使用覆盖索引(查询使用了索引,并且需要返回的列,在该索引中,已经全部找到),减少select*。

    回表查询

    以每个字段为建立的索引(包括联合索引),在此索引表找不到需要返回的数据,就需要从聚集索引中查找,这个过程叫做回表查询。

    前缀索引

    当字段类型为字符串(varchar、text等)时,有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘IO,影响查询效率。此时可以只将字符串的一部分前缀,建立索引,这样大大节约索引空间,从而提高效率。

    #建立前缀索引语法
    create index idx_xxx on table_name(column(n))
    

    索引长度

    可以根据索引的选择性来确定,而选择性指不重复的索引值和数据表的记录总数的比值,索引选择性越高查询效率越高,唯一索引的选择性为1,最好的索引,性能最好。

    查询某字段数值不重复

    #不重复distinct
    select count(distinct email) from tb_name;
    
    #选择性
    select count(distinct email)/count(*) from tb_name;
    

    单列联合索引

    单列索引:即一个索引只包含单个列
    联合索引:即一个索引包含多个列
    业务场景 ,查询多个字段,优先使用联合索引

    索引设计原则

    1. 数据量大,且查询比较频繁的表建立索引
    2. 针对常作为查询条件,排序,分组操作的字段建立索引
    3. 选择区分度高的建立索引,区分度高,查询效率高
    4. 字符串类型,尽量选择前缀索引
    5. 尽量使用联合索引
    6. 控制索引数量,占据磁盘
    7. 索引列的null,使用not null约束,有助于数据库自我识别

    相关文章

      网友评论

          本文标题:MySQL索引的使用规则和设计原则

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