优化MySQL前缀索引[通俗易懂]

优化MySQL前缀索引[通俗易懂]文章介绍如何如何创建MySQL前缀索引,以及计算索引的选择性,明确使用前置索引的场景。

大家好,又见面了,我是你们的朋友全栈君。

目标

  1. 明确前缀索引使用场景;
  2. 掌握创建前缀索引的语法;
  3. 掌握计算索引选择性的方法。

定义

    对于字符串列,可以使用语法指定索引前缀长度来创建仅使用列值开头的索引。
    语法:
        CREATE INDEX 自定义索引名称 ON 表名字(字段名(截取该字段的位数));
    举例:
        /*为pharmacy表创建一个名字为name_of_drug_10的前缀索引,这个索引截取了name_of_drug字段的前10位。*/
        CREATE INDEX name_of_drug_10 ON pharmacy (name_of_drug(10));

场景

如果需要对BLOBTEXT类型的列创建索引,则只能创建前缀索引。


使用方法

通过索引选择性来确定前缀索引截取的字节位数,索引的选择性指不重复的索引值与数据总量的比值。索引的选择性越高则查询效率越高,因为选择性更高的索引可以让mysql在查找的时候过滤掉更多的行。

  • 案例
    /*给pharmacy表建立以name_of_drug字段为前缀的索引,先来计算索引选择性。*/
    SELECT 
    COUNT(DISTINCT LEFT(name_of_drug,3))/COUNT(1) AS selectivity3,
    COUNT(DISTINCT LEFT(name_of_drug,4))/COUNT(1) AS selectivity4,
    COUNT(DISTINCT LEFT(name_of_drug,5))/COUNT(1) AS selectivity5,
    COUNT(DISTINCT LEFT(name_of_drug,6))/COUNT(1) AS selectivity6,
    COUNT(DISTINCT LEFT(name_of_drug,7))/COUNT(1) AS selectivity7,
    COUNT(DISTINCT LEFT(name_of_drug,8))/COUNT(1) AS selectivity8, 
    COUNT(DISTINCT LEFT(name_of_drug,9))/COUNT(1) AS selectivity9
    FROM pharmacy;
  • 结果集

优化MySQL前缀索引[通俗易懂]

  • 结论

截取name_of_drug前6个字节进行对比就已经有99.74%的数据不一样了,所以可以选择name_of_drug前6个字节为前缀创建前缀索引:

    CREATE INDEX name_of_drug_6 ON pharmacy (name_of_drug(6));

注意

索引的选择性在80%以上适合建立,否则不建议建立索引,例如性别等。

前缀支持和前缀长度(如果支持)取决于存储引擎。例如,对于InnoDB 使用REDUNDANT 或 COMPACT 行格式的表,前缀的最大长度为767个字节。对于InnoDB使用DYNAMIC或COMPRESSED 行格式的表,前缀长度限制为3072字节。对于MyISAM表,前缀长度限制为1000个字节。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142343.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Add Two Numbers

    Add Two Numbers

    2021年9月7日
    60
  • Istio组件日志设置[通俗易懂]

    1.istio-pilot日志级别编辑istio-system.deployment.istio-pilot,修改args中–log_output_level=default:指定日志级别2.istio-policy日志级别设置同istio-pilot3.istio-proxy(envoy)日志级别设置进入istio-proxy容器中,通过如下命令进行设置:curl-…

    2022年4月18日
    51
  • mysql建立联合索引_mysql之联合索引

    mysql建立联合索引_mysql之联合索引mysql之联合索引测试:前期准备:建立联合索引?CREATETABLE`test`(`id`bigint(16)NOTNULLAUTO_INCREMENT,`aaa`varchar(16)NOTNULL,`bbb`varchar(16)NOTNULL,`ccc`int(11)NOTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBDEF…

    2022年6月3日
    44
  • FFM模型详解[通俗易懂]

    FFM模型详解[通俗易懂]FM和FFM模型是最近几年提出的模型,凭借其在数据量比较大并且特征稀疏的情况下,仍然能够得到优秀的性能和效果的特性,屡次在各大公司举办的CTR预估比赛中获得不错的战绩。美团点评技术团队在搭建DSP的过程中,探索并使用了FM和FFM模型进行CTR和CVR预估,并且取得了不错的效果。本文旨在把我们对FM和FFM原理的探索和应用的经验介绍给有兴趣的读者。文章参考:【1】文章目录1.FFM模型原理2.FFM模型实现3.FFM模型应用1.FFM模型原理假设一个广告分类的问题,根据用户和广告位相关的.

    2022年6月7日
    78
  • hadoop集群中zkfc的作用和工作过程

    hadoop集群中zkfc的作用和工作过程hadoop集群中zkfc的作用和工作过程

    2022年4月23日
    61
  • 服务器加网站防盗链,网站防盗链的设置方法介绍(适用于IIS和Apache)[通俗易懂]

    服务器加网站防盗链,网站防盗链的设置方法介绍(适用于IIS和Apache)[通俗易懂]这篇文章主要为大家详细介绍了网站防盗链的设置方法介绍(适用于IIS和Apache),具有一定的参考价值,感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴。做网站的朋友一般都会遇到这样的一种情况,就是别人的网站经常会调用我们自己网站的图片或者文件,这无形之中会增加我们的服务器的压力,尤其是对于一些服务器带宽并不是十分富裕的网站来说就更是雪上加霜。因此我们需要学会设置防盗链来应对或者说来…

    2022年7月23日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号