mysql 前缀索引_MySQL前缀索引

mysql 前缀索引_MySQL前缀索引有时候需要索引很长的字符字段列,这会增加索引的存储空间以及降低索引的查询效率,一种策略是可以使用哈希索引,还有一种就是使用前缀索引。前缀索引是选择字符列的前n个字符作为索引,这样可以大大节约索引空间,从而提高索引效率。前缀索引的选择性使用前缀索引,在一些场景下可能使得重复的索引值变多,索引的选择性变低,查找时需要过滤更多的行,因此建立前缀索引也要考虑前缀的索引选择性不能太低。Tips:主键索引和唯…

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

edf785913ea463b60ad5cee71bf53317.png

有时候需要索引很长的字符字段列,这会增加索引的存储空间以及降低索引的查询效率,一种策略是可以使用哈希索引,还有一种就是使用前缀索引。

前缀索引是选择字符列的前n个字符作为索引,这样可以大大节约索引空间,从而提高索引效率。

前缀索引的选择性

使用前缀索引,在一些场景下可能使得重复的索引值变多,索引的选择性变低,查找时需要过滤更多的行,因此建立前缀索引也要考虑前缀的索引选择性不能太低。

Tips:主键索引和唯一索引的索引值是不可能重复的,索引的选择性就很高,查询效率也最好。

选择足够长的前缀可以更好的保证高选择性,但又不能太长,需要一个合适的长度。怎么选?

在数据增长不是很快的表,可以通过以下方式来计算出合适的前缀索引的选择长度值:

SELECT COUNT(DISTINCT index_column)/COUNT(*) FROM table_name;

Tips:index_column 代表要添加前缀索引的列

在数据增长很快的表中,上述方式计算就不准确了,原因在于数据增长很快的表 index_column 字段重复的记录和总记录数据变化都比较快,那么计算出来的前缀索引长度也是随着变化很快的。

创建前缀索引

ALTER TABLE table_name ADD INDEX index_name (index_column(length));

前缀索引的局限性

前缀索引能使索引更小、更快,但是 MySQL 无法使用前缀索引做 ORDER BY 和 GROUP BY , 也无法使用前缀索引做覆盖扫描。

后缀索引

MySQL 没有提供后缀索引,事实上,一些业务场景对后缀匹配选择性更高,比如我曾经参与过的项目,手机的入网标示imei号,前缀都是86等固定的国家编号开头,这个时候可以将字符反转后存储,就可以建立选择性较高的前缀索引。

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

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

(0)
上一篇 2022年5月10日 上午8:20
下一篇 2022年5月10日 上午8:20


相关推荐

  • 如何配置iis使其支持php,iiS PHP,让iiS支持php语言,iiS下配置php运行环境教程图解

    如何配置iis使其支持php,iiS PHP,让iiS支持php语言,iiS下配置php运行环境教程图解iiSPHP 让 iiS 支持 php 语言 iiS 下配置 php 运行环境教程图解 IIs 是 windows 系统下的互联网信息服务 大家主要用于搭建 wEB 服务器 IIs 中已经自带了 AsP 语言的支持 不过现在许多网页系统都是 php 编写的 并且 php 具有更高的运行效率 想让 IIs 支持 php 的话还需要配置 php 运行环境 下面小编就具体分享下 IIs 怎么安装 php 支持 IIs 配置 PHP 三步骤 1 下载 PHP 的文件包

    2026年3月19日
    2
  • 即梦ai积分每天清零吗 即梦ai怎么获得无限积分教程

    即梦ai积分每天清零吗 即梦ai怎么获得无限积分教程

    2026年3月13日
    2
  • 组合数递推的计算方法 c语言,组合数公式的递推公式

    组合数递推的计算方法 c语言,组合数公式的递推公式组合数公式的递推公式:c(m,n)=c(m-1,n-1)+c(m-1,n)。等式左边表示从m个元素中选取n个元素,而等式右边表示这一个过程的另一种实现方法:任意选择m中的某个备选元素为特殊元素,从m中选n个元素可以由此特殊元素的被包含与否分成两类情况,即n个被选择元素包含了特殊元素和n个被选择元素不包含该特殊元素。前者相当于从m-1个元素中选出n-1个元素的组合,即c(m-1,n-1);后者相当于…

    2022年7月15日
    20
  • java socket通讯乱码问题的解决

    java socket通讯乱码问题的解决使用socket通讯经常会遇到客户端、服务器端字符编码不一致的情况,如果传输的信息包含中文,这时我们可能就需要对传输的信息的按照指定的字符集进行解码或者编码首先我们了解jdkapi中的几个基本的概念String类StringpublicString(byte[] bytes,String charsetName)th

    2022年7月8日
    63
  • db4o java_java com.db4o 类

    db4o java_java com.db4o 类packageorg.rx.repository.db4o.impl;importcom.db4o.Db4o;importcom.db4o.ObjectContainer;importcom.db4o.ObjectSet;importcom.db4o.config.Configuration;importlombok.SneakyThrows;importorg.rx.api.dto.common…

    2022年7月21日
    12
  • pycharm中如何取消多行注释_pycharm怎么注释代码

    pycharm中如何取消多行注释_pycharm怎么注释代码pycharm中同时注释(取消注释)多行(单行)代码的快捷键都是Ctrl+/:选中代码,同时按住Ctrl+/(command+/),被选中行被注释;再次按下Ctrl+/(command+/),注释被取消….

    2022年8月29日
    7

发表回复

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

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