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 不允许索引这些列的完整长度
③ 前缀索引会降低索引的选择性
④ 真正的难点在于:要选择足够长的前缀以保证较高的选择性,同时又不能太长, 前缀的长度应该使前缀索引的选择性接近索引整个列,即前缀的基数应该接近于完整列的基数

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

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

(0)
上一篇 2022年5月23日 下午1:40
下一篇 2022年5月23日 下午1:40


相关推荐

  • 头文件cstring、string、string.h的区别「建议收藏」

    头文件cstring、string、string.h的区别「建议收藏」头文件cstring、string、string.h的区别<string>是C++标准库头文件,使用stirng类型必须首先包含string头文件,用于字符串操作,string类型可以进行+、=、+=、>等运算。std::string类实际上是STL模板类std::basic_string的具体化。#include<string>usingnamespacestd;strings;<cstring>是C标准库头文件<strin

    2025年9月3日
    8
  • 网站被恶意刷流量解决方案

    网站被恶意刷流量解决方案很多站长朋友可能会经常遇到被同行竞争对手恶意刷流量的情况,而且流量ip来路是随机的,全国各地乃至全世界的ip都有,根本没办法查出来是谁干的。一般出现这种情况都是对方用流量宝或者流量精灵来刷你网站的,目的很明显,对方要么就是用这些垃圾流量来掩盖自己的ip,从而达到攻击入侵等不可告人的目的,要么就是想用恶意刷流量的方式让你合作的广告联盟帐号被封禁。大部分站长都会对此束手无策,有些甚至被吓得撤下广告,关…

    2026年4月17日
    3
  • unity常用的800个脚本_unity怎么挂载脚本

    unity常用的800个脚本_unity怎么挂载脚本使用Flow类型的指令十分类似于使用英语口语,基本上这些指令的单词只要看到就能猜到它的作用,尤其是学过编程的朋友对其中的某些单词一定很熟悉。 1)Break:让一个循环强制终止。 2)Wait和WaitFreams:前者为等待若干秒(second),后者为等待若干帧(fream)。        3)Stop和StopBlock和S…

    2025年6月29日
    3
  • PHP 发邮件_php发送邮件带附件

    PHP 发邮件_php发送邮件带附件
    测试Linux邮件服务器是否可用
    #mailaaa@163.com
    subject:helloworld
    ctrl+d
     
    服务器设置
    php.ini
    sendmail_path=/usr/sbin/sendmail-t-i
     
    php测试
    $message=”Line11/nLine21/nLine31″;
    //1行が70文字を超える場合のため、wo

    2022年10月20日
    1
  • Nginx服务器重启命令,关闭「建议收藏」

    Nginx服务器重启命令,关闭「建议收藏」一些Nginx相关的命令

    2022年6月22日
    30
  • matlab高斯滤波器

    matlab高斯滤波器1 使用 matlab 自带的函数 clear img imread lena tif w fspecial gaussian 5 5 1 replicate 图像大小通过赋值外边界的值来扩展 symmetric 图像大小通过沿自身的边界进行镜像映射扩展

    2026年3月19日
    2

发表回复

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

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