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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Ubuntu 优化、美化(主题、终端)[通俗易懂]

    Ubuntu 优化、美化(主题、终端)[通俗易懂]Ubuntu优化、美化(主题、终端)零效果图一优化Ubuntu\1系统更新\2安装GDebi(第三方软件安装)\3安装搜狗输入法\4软件卸载,安装4.1卸载libreOffice安装WPS4.2卸载掉亚马逊链接4.3卸载firebox浏览器安装Chrome/Chromium浏览器\5修改更新源\6vim配置\6菜单栏位置\7二美化Ubuntu\1主题1.1安装unity-tweak-tool:1.2Flatabulous主题\

    2022年7月22日
    15
  • Adobe Flash Player 未能正常运行问题「建议收藏」

    Adobe Flash Player 未能正常运行问题「建议收藏」问题描述笔者使用的QQ浏览器在打开含有Flash的网页时经常出现如下问题:提示:您的AdobeFlashPlayer版本太旧,可能会有安全性风险。建议您升级到最新版本。随后出现:提示:必要的系统组件未能正常运行,请修复AdobeFlashPlayer点击立即修复,安装最新的AdobeFlashPlayer,结果没有任何作用。-原因探寻按照网上的现有方法,都说是因为FlashHelperService进程没能正常启动,或者是直接把FlashHelperS

    2022年5月20日
    175
  • java中的集合

    java中的集合java集合概述Java集合可分为Collection和Map两种体系Collection接口:单列数据,定义了存取一组对象的方法的集合List:元素有序(指的是存储时,与存放顺序保持一致)、可重复的集合Set:元素无序、不可重复的集合Map接口:双列数据,保存具有映射关系“key-value对”的集合ArrayList和LinkedList的异同?答:二者都线程不安全,相对线程安全的Vector,执行效率高。此外,ArrayList是实现了基于动态数组的数据结构,Li

    2022年7月7日
    26
  • Centos6.5 Qt4开发 Cannot find -lGL QApplication not file or dir

    Centos6.5 Qt4开发 Cannot find -lGL QApplication not file or dir

    2021年9月4日
    59
  • stm32开发教程_单片机STM32

    stm32开发教程_单片机STM32本博客的编写目的:一、自我总结,记录。二、分享,输出,加深思考。三、不作细致如书本般编排,尽管那样的排版很好看,但是过于耗费时间,还有很多东西没有必要说明,完全可以自己去解决,但还是尽量做好排版,便于阅读。四、尽可能举一反三,做到真正能够处理实际问题。STM32开发实战(1)目录一、概述,目的二、搭建步骤三、时钟部分案例分析四、理论总结一、

    2022年9月7日
    0
  • XXE实体注入(超详细!)

    XXE实体注入(超详细!)可以把它理解为txt,就是存储文件的,读取并调用出来,这是最核心的将你的代码当成XXE代码,然后XXE再交给PHP去执行将1.txt的东西,放入test这个变量实体就是变量&test就是输出这个变量<scan></scan>只是一个声明格式,随便写什么,就算写成<abc></abc>都可以,只要满足<x></x>格式就行最主要的是访问的地址,file,http等协议都可以。XXE:XML外部实体注入,原理:.

    2022年5月23日
    61

发表回复

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

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