mysql的前缀索引

  1. 什么是前缀索引
    1. 所谓的前缀索引,说白了就是对文本的前几个字符建立索引(具体是几个字符在建立索引时去指定),比如以产品名称的前10位来建索引,这样建立起来的索引更小,查询效率更快
    2. 有点类似oracle中对字段使用left函数来建立函数索引,只不过mysql的这个前缀索引在查询时是内部自动完成匹配的,并不需要left函数
  2. 为什么要用前缀索引
    1. 一般来说,当某个字段的数据量太大,而且查询又非常的频繁时,使用前缀索引能有效的减少索引文件的大小,让每个索引页可以保存更多的索引值,从而提高了索引查询的速度
    2. 比如,客户店铺名称,有的名称很长,有的很短,如果完全按照全覆盖来建索引,索引的存储空间可能会非常的大,有的表如果索引创建的很多,甚至会出现索引存储的空间都比数据表的存储空间大很多,因此对于这种文本很长的字段,我们可以截取前几个字符来建索引,在一定程度上,既能满足数据的查询效率要求,又能节省索引存储空间
    3. 但是另一个方面,前缀索引也有他的缺点,mysql中无法使用前缀索引进行order by 和group by,也无法用来进行覆盖扫描,当字符串本身可能比较长,而且前几个字符完全相同,这个时候前缀索引的优势已经不明显了,就没有创建前缀索引的必要了
    4. 索引的选择性越高则查询效率越高,因为选择性高的索引可以让mysql在查找时过滤掉更多的行,数据查询速度更快
    5. 当某个字段内容的前几位区分度很高的时候,这个时候采用前缀索引,可以在查询性能和空间存储方面达到一个很高的性价比
  3. 如何创建前缀索引
    1. alter table table_name add key(column_name(prefix_length))
    2. 其中prefix_length这个参数,就是前缀长度的意思,通常通过如下方式进行确认
      1. 第一步,先计算某个字段全列的区分度:
        1. select count(distinct column_name) / count(*) from table_name;
      2. 第二步:然后在计算前缀长度为多少时和全列的区分度相似
        1. select count(distinct left(column_name,prefix_length)) / count(*) from table_name;
      3. 最后,不断地调整prefix_length的值,直到和全列计算出区分度相近,最相近的那个值,就是我们想要的值
  4. 使用前缀索引需要注意的事项
    1. 当某个索引字段的字符串列很大时,创建的索引也就变得很大,为了减小索引体积,提高索引的扫描速度,使用索引的前部分字符串作为索引值,这样索引占用的空间就会大大减少,并且索引的选择性也不会降低很多,这时前缀索引显现的作用就会非常明显,前缀索引本质是索引查询性能和存储空间的一种平衡
    2. 对于blob和text列进行索引,或者非常长的varchar列,就必须使用前缀索引,因为MySQL不允许索引他们的全部长度
    3. 但是如果某个字段内容,比如前缀索引部分相似度很高,此时的前缀索引显现效果就不会很明显,采用覆盖索引效果会更好

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/38434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java与机器学习模型的集成与部署

Java与机器学习模型的集成与部署 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨如何使用Java集成和部署机器学习模型。 随着人工智能和机器学习…

【SQL】使用索引的好处

使用索引可以显著加快查询速度,主要原因有以下几个方面: 1. 减少数据扫描量 索引类似于一本书的目录,可以让数据库快速找到特定的数据行,而不是从头到尾扫描整个表。例如,没有索引的情况下,查询 SELECT *…

简洁版人工智能训练流程

人工智能(AI)训练流程是指使用数据来训练机器学习模型,使其能够执行特定任务的过程。以下是人工智能训练的一般流程: #mermaid-svg-qZ5c5PU9yms7cVOB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:…

Java中如何优雅地处理NamingException异常?

Java中如何优雅地处理NamingException异常? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Java开发中,NamingException异常是JNDI&…

鸿蒙arkts api9 图片验证码 canvas

/*** 图片验证码***/ Component export default struct RandomTxtCanvas {Link imgRandomTxt:string//图片验证private settings: RenderingContextSettings new RenderingContextSettings(true)private context: CanvasRenderingContext2D new CanvasRenderingContext2D(th…

DataWhaleAI Tsak1 运行Baseline

题目背景 在当今数字化时代,企业积累了丰富的对话数据,这些数据不仅是客户与企业之间交流的记录,更是隐藏着宝贵信息的宝库。在这个背景下,群聊对话分角色要素提取成为了企业营销和服务的一项重要策略。 群聊对话分角色要素提取…

nlp--最大匹配分词(计算召回率)

最大匹配算法是一种常见的中文分词算法,其核心思想是从左向右取词,以词典中最长的词为优先匹配。这里我将为你展示一个简单的最大匹配分词算法的实现,并结合输入任意句子、显示分词结果以及计算分词召回率。 代码 : # happy coding…

Tektronix泰克 AWG70001A 任意波形发生器

Tektronix泰克 AWG70001A 任意波形发生器 AWG70000A 系列任意波形发生器 (AWG) 在采样率、信号保真度和波形内存方面代表着尖端水平,特别适合复杂器件、系统和实验的设计、测试和操作。由于高达 50 GS/s 采样率和 10 位垂直分辨率,它提供了优秀的信号激…

【Python】入门Python,你必须了解这些事

个人主页:【😊个人主页】 系列专栏:【❤️Python】 文章目录 前言一、认识Python什么是Python?!Python的起源Python的特点简洁易读跨平台,可移植拥有强大的库和框架面向对象 Python的优缺点优点缺点 Python的应用环境扩…

linux ls文件排序

linux可以使用ls命令结合一些选项来按照文件大小对文件和目录进行排序。以下是一些常用的方法: 1、这里,-l 选项表示长格式输出(包括文件权限、所有者、大小等),-S 选项表示按照文件大小排序,-h 选项表示以…

PHP留守儿童关爱之家网站-计算机毕业设计源码11079

目录 1 绪论 1.1 研究背景 1.2研究意义 1.3 论文结构与章节安排 2 留守儿童关爱之家网站系统分析 2.1 可行性分析 2.2 系统功能分析 2.3 系统用例分析 2.4 系统流程和逻辑 2.5本章小结 3 留守儿童关爱之家网站总体设计 3.1系统结构设计 3.2系统功能模块设计 3.2 数…

【算法训练记录——Day38】

Day38——动态规划Ⅰ 1.理论#2.leetcode_509斐波那契数3.leetcode_70爬楼梯4.kamacoder_57爬楼梯5.leetcode_746使用最小花费爬楼梯 1.理论 一般解题步骤: 确定dp数组及下标含义确定递推公式数组如何初始化确定递归顺序举例推导dp数组 #2.leetcode_509斐波那契数…

阿里云物联网应用层开发:第一部分,项目简介

文章目录 1、物联网应用层简介2、阿里云物联网应用层开发例程主要内容3、需要掌握基础知识 1、物联网应用层简介 应用层是物联网系统的用户界面,它提供了用户与系统交互的接口,这一层是将网络传输层的数据结果以易于理解和使用的方式呈现给用户&#xf…

vue3 Hooks 函数封装思想 useTable

1.什么是Hooks 1.一系列已use作为开头的方法,它们提供了可以完全避开class写法,在函数组件中完成生命周期 状态管理 逻辑复用等几乎全部的组件开发工作能力 2.Hooks最核心的价值来着内部的状态管理 3. 在vue3中,hooks的概念结合了vue的响应系…

linux虚拟机部署的MySQL如何使用外网访问?教你轻松使用cpolar在centos搭建内网穿透

文章目录 写在前面实现Linux的内网穿透1、官网账号注册2、在Linux部署我们自己的项目3、一键自动下载安装cpolar4、设置自己的token5、启动cpolar服务6、MySQL穿透测试 卸载方法 写在前面 相信很多小伙伴在本地搭建了一个MySQL数据库,想让其他同事或者合作者一起使…

BCFtools安装

记得之前安装这个软件的时候是非常简单的,但是今天重新安装的时候出现了很多的麻烦,想想还是做个记录吧! bcftools的下载地址如下: Releases samtools/bcftools (github.com)https://github.com/samtools/bcftools/releases/这里我们选用的…

力扣523.连续的子数组和

力扣523.连续的子数组和 哈希表记录下标 class Solution {public:bool checkSubarraySum(vector<int>& nums, int k) {//初始化 方便求余数为0的情况unordered_map<int,int> cnt {{0,-1}};int idx0;for(int i0;i<nums.size();i){idx (idx nums[i]) % …

网络安全 文件上传漏洞-21 upload-labs通过全部关卡

通过全部关卡后对 upload-labs实验环境中 文件上传做一个总结&#xff1a;实验环境中文件上传主要分为黑名单、白名单、读取检查文件类型、删除文件几个类型&#xff0c;针对不同的类型可以使用不同的方式绕过&#xff0c;从而上传木马文件&#xff1a; 黑名单验证 如果是黑名…

【数据结构】(C语言):队列

队列&#xff1a; 线性的集合。先进先出&#xff08;FIFO&#xff0c;first in first out&#xff09;。两个指针&#xff1a;头指针&#xff08;指向第一个进入且第一个出去的元素&#xff09;&#xff0c;尾指针&#xff08;指向最后一个进入且最后一个出去的元素&#xff0…

Linux CentOS 7 离线安装.NET环境

下载 下载.NET 例如&#xff1a; aspnetcore-runtime-6.0.15-linux-x64.tar.gz 复制 复制到如下目录&#xff1a; /usr/local/dotnet/aspnetcore-runtime-6.0.15-linux-x64.tar.gz 解压 cd /usr/local/dotnet/ tar -zxvf aspnetcore-runtime-6.0.15-linux-x64.tar.gz 创建…