优化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个字节。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • BP人工神经网络matlab工具箱_matlab神经网络控制

    BP人工神经网络matlab工具箱_matlab神经网络控制自己测试人口预测的matlab实现:x=[54167551965630057482587966026661465628286465365994672076620765859672956917270499725387454276368785348067182992852298717789211908599242093717949749625997542987051000721016541030081…

  • Monkey测试详解「建议收藏」

    Monkey测试详解「建议收藏」概念:monkeytest,也有人叫做搞怪测试,一般指用毫无规律的指令或操作去测试被测系统,观察被测系统的稳定性和容错性。这种测试方式在产品周期中的早期阶段会找到很多很好的bug,为用户节省不少的时

  • YUV格式到底是什么?

    YUV格式到底是什么?简介YUV是视频、图片、相机等应用中使用的一类图像格式,实际上是所有“YUV”像素格式共有的颜色空间的名称。与RGB格式(红-绿-蓝)不同,YUV是用一个称为Y(相当于灰度)的“亮度”分量和两个“色度”分量表示,分别称为U(蓝色投影)和V(红色投影),由此得名。YUV也可以称为YCbCr,虽然这些术语意味着略有不同,但它们往往会混淆并可互换使用。Y表示亮度分量:如果只显示Y的话,…

  • Flowable 流程跟踪图片

    Flowable 流程跟踪图片文章目录1.DefaultProcessDiagramGenerator2.DefaultProcessDiagramCanvas3.使用Flowable默认的流程图生成器4.自定义流程图生成器4.1扩展DefaultProcessDiagramCanvas4.2扩展DefaultProcessDiagramGenerator4.3或者自定义类实现ProcessDiagramGenerator4.4使用自定义的流程图生成器生成流程图1.DefaultProcessDiagramGener

  • windows下mysql安装配置教程_mysql使用教程windows

    windows下mysql安装配置教程_mysql使用教程windows1,从官网下载安装包https://dev.mysql.com/downloads/mysql/选择直接下载就可以(建议使用google浏览器快一点)2,下载完之后放到磁盘里解压3,win+r打开cmd,进入到解压之后的bin目录下cdC:\mysql-8.0.27-winx64\bin如果cd进不去,就把文件夹放到C盘(我一开始放到E盘,然后一直进不去,C盘就可以了)4,初始化数据库,然后记录下方框里的内容,这是随机生成的密码(uq,hau…

发表回复

您的电子邮箱地址不会被公开。

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