mysql前缀索引的索引选择性

mysql前缀索引的索引选择性mysql前缀索引的索引选择性一.基础概念在mysql中建立前缀索引的意义在于相对于整列建立索引,前缀索引仅仅是选择该列的部分字符作为索引,减少索引的字符可以节约索引空间,从而提高索引效率,但这样也会降低索引的选择性关于索引的选择性,它是指不重复的索引值(也称为基数cardinality)和数据表的记录总数的比值,范围从1/(数据表记录总数)到1之间。索引的选择性越高则查询效率越高,因为选

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

mysql前缀索引的索引选择性

一. 基础概念
在mysql中建立前缀索引的意义在于相对于整列建立索引,前缀索引仅仅是选择该列的部分字符作为索引,减少索引的字符可以节约索引空间,从而提高索引效率,但这样也会降低索引的选择性
关于索引的选择性,它是指不重复的索引值(也称为基数cardinality)和数据表的记录总数的比值,范围从1/(数据表记录总数)到1之间。索引的选择性越高则查询效率越高,因为选择性高的索引可以让MySQL在查找时过滤掉更多的行。选择性为1的索引叫唯一索引,这是最好的索引选择性,性能也是最好的
建立合理前缀索引的诀窍在于要选择足够长的前缀以保证较高的选择性,同时又不能太长(以便节约空间)。前缀应该足够长,以使得前缀索引的选择性接近于索引的整个列。换句话说,前缀的基数应该接近于完整列的基数

二. 实地测试
① 创建测试表music,并插入一些数据

create table music( name varchar(30) );

insert into music values('BITE'),('There for you'),('Scarborough Fair'),('Shape of You'),('Marvin Gaye'),('Pretty Girl'),('Pretty Boy'),('Walk Away'),('YOUTH'),('Paris');

insert into music values ('Scarborough Fair'),('Shape of You'),('Marvin Gaye'),('Pretty Girl'),('Pretty Boy'),('Walk Away'),('YOUTH'),('Paris');

② 查看刚刚创建的表的完整列索引选择性

select count(distinct name) / count(*) from music;

完整列索引选择性

③ 找出合适的前缀长度

select count(distinct left(name,1))/count(*) as sel1, count(distinct left(name,2))/count(*) as sel2, count(distinct left(name,3))/count(*) as sel3, count(distinct left(name,4))/count(*) as sel4 from music;

索引

因为该测试表中插入的数据量少,所以可以看到当选择前两个字符作为前缀索引后,索引的选择性达到了0.5,接近完整列的索引选择性0.5556
④ 建立前缀索引并查看

alter table music add index music_index(name(2));

查看前缀索引

⑤ 前缀索引被使用

select * from music where name like 's%';

前缀索引被使用

三. 注意事项
① 前缀索引是一种能使索引更小,更快的有效办法,但另一方面也有其缺点:mysql无法使用其前缀索引做ORDER BY和GROUP BY,也无法使用前缀索引做覆盖扫描
② 要明确使用前缀索引的目的与优势:
.大大节约索引空间,从而提高索引效率
.对于 BOLB 、 TEXT 或者很长的 VARCHAR 类型的列,必须使用前缀索引,因为 MySQL 不允许索引这些列的完整长度
③ 前缀索引会降低索引的选择性
④ 真正的难点在于:要选择足够长的前缀以保证较高的选择性,同时又不能太长, 前缀的长度应该使前缀索引的选择性接近索引整个列,即前缀的基数应该接近于完整列的基数

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

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

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

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

(0)
blank

相关推荐

  • 一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)

    一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)0背景1.手机USB接口通信特点-1.1使用方便-1.2通用性强-1.3速度快-1.4可采用总线供电2.手机USB接口通信原理-2.1常见手机USB接口-2.2通信过程-2.3体系架构2.4软件层次3.手机USB接口与外设通信方案-3.1USB(手机)USB(外设)-3.1.1USBHost简述

  • 系统文件句柄数修改_linux查看文件句柄使用情况

    系统文件句柄数修改_linux查看文件句柄使用情况找到如下注册表分支:  HKEY_LOCAL_MACHINE  – SOFTWARE  – – Microsoft  – – – Windows NT  – – – – CurrentVersion  – – – – – Windows  在右侧窗格中可以看到名为“GDIProcessHandleQuota”与“USERProcessHandleQuota”的注册表项;

    2022年10月10日
  • idea代码编辑器_idea不会自动提示代码

    idea代码编辑器_idea不会自动提示代码介绍如何同时编辑一大块的代码(即如何让光标的位置同时停留在一大块代码行中)。

  • 详解java人力外包的费用组成

    详解java人力外包的费用组成根据IDC的统计数字,在所有软件开发类人才的需求中,对java工程师的需求达到全部需求量的60%~70%,也就是说,很多企业的信息化建设都离不开java开发人员。但面对成本费用、灵活用工、编制限制、劳务纠纷等问题,包括BAT在内的很多大型知名企业都会与软件人力外包公司合作来引进java人才。那么什么是java人力外包?java人力外包指的是由用人企业向软件人力外包公司提出java方面的用人需求,包括人数、技能要求、到岗时间、项目周期、预算等,软件人力外包公司通过外派的方式将符合要求的java人才提供给

  • 微信小程序轮播图实现 含小圆点 图片下方显示标题

    微信小程序轮播图实现 含小圆点 图片下方显示标题实现结果html代码<viewclass=”lb”><swiperindicator-dots=”true”autoplay=”true”interval=”3000″current=”0″circular=”true”style=”width:100%;”><swiper-item><imagesrc=”../image/im1.jpg

  • 不会真有人Macbook录屏没声音吧?别用SoundFlower了!

    不会真有人Macbook录屏没声音吧?别用SoundFlower了!录屏顺便一提:shift+command+3:截整个屏幕shift+command+4:截所选区域shift+command+5:录屏Loopback可以把内置声音录进去,且音质很顶,且录屏的时候,你可以听得到声音。loopback官网先跟着我这么着配置一下,英语看不懂不用怕,有我在没意外。然后,按shift+command+5,底部会出现那个条条框。然后,先选好是录整个屏幕还是录一部分。然后,点选项,把麦克风那部分选成Loopback开头的那个选项。然后,点击录制,就完了。然

发表回复

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

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