iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >一文简单了解MySQL前缀索引
  • 470
分享到

一文简单了解MySQL前缀索引

2024-04-02 19:04:59 470人浏览 薄情痞子
摘要

当要索引的列字符很多时 索引则会很大且变慢 ( 可以只索引列开始的部分字符串 节约索引空间 从而提高索引效率 ) 原则: 降低重复的索引值 例如现在有一个地区表 areagdpcod

当要索引的列字符很多时 索引则会很大且变慢

( 可以只索引列开始的部分字符串 节约索引空间 从而提高索引效率 )

原则: 降低重复的索引值

例如现在有一个地区表

areagdpcode
chinaShanghai100aaa
chinaDalian200bbb
usaNewYork300ccc
chinaFuxin400DDD
chinaBeijing500eee

发现 area 字段很多都是以 china 开头的

那么如果以前1-5位字符做前缀索引就会出现大量索引值重复的情况

索引值重复性越低 查询效率也就越高

前缀索引测试

// 创建一个测试表
CREATE TABLE `x_test` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `x_name` varchar(255) NOT NULL,
  `x_time` int(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4145025 DEFAULT CHARSET=utf8mb4

// 添加200万条测试数据
INSERT INTO x_test(x_name,x_time) SELECT CONCAT(rand()*3300102,x_name),x_time FROM x_test WHERE id < 30000;

200万 测试数据

  • 在无任何索引的情况下随便查询一条
    SELECT * FROM x_test WHERE x_name = '1892008.205824857823401.800099203178258.8904820949682635656.62526521254';查询时间:2.253s

  • 添加前缀索引 ( 以第一位字符创建前缀索引 )
    alter table x_test add index(x_name(1))再次查询相同sql语句
    SELECT * FROM x_test WHERE x_name = '1892008.205824857823401.800099203178258.8904820949682635656.62526521254';查询时间:3.291s
    当使用第一位字符创建前缀索引后 貌似查询的时间更长了
    因为只第一位字符而言索引值的重读性太大了
    200万条数据全以数字开头那么平均20万条的数据都是相同的索引值

  • 重新建立前缀索引 这次以前4位字符来创建
    alter table x_test add index(x_name(4));再次查询相同sql语句
    SELECT * FROM x_test WHERE x_name = '1892008.205824857823401.800099203178258.8904820949682635656.62526521254';查询时间:0.703s
    这次以前4位创建索引 大大减少了索引值的重复性 查询速度从3秒提升到0.7秒

  • 200万条数据都以数字开头 而0-9排列组合7位则可达到千万种组合
    也就是以前7位来做索引则不会出现重复索引值的情况了
    alter table x_test add index(x_name(7));再次查询相同sql语句
    SELECT * FROM x_test WHERE x_name = '1892008.205824857823401.800099203178258.8904820949682635656.62526521254';查询时间:0.014s ( 首次执行无缓存状态下 )

补充:使用前缀索引的执行过程

  1. 从index2的索引树上,找到满足索引值是“zhangs”的记录,找到第一个是ID1;
  2. 到主键索引树上查到ID1这一行,判断email的值满不满足where后的条件,不满足这一行丢弃。
  3. 继续回到index2这个索引树上查下一条记录,发现如果还是"zhangs",取出ID2,再回到ID2索引树上进行判断,如果值正确,将结果返回结果集中。
  4. 重复执行以上流程,直到从index2索引树上取出的数据不是“zhangs”,循环结束。

通过以上执行流程的分析你就可以知道,前缀索引会导致扫描的行数变多,这和你所指定前缀的长度有关。或许email(7)中的区分度就比email(6)高,就不会扫描那么多行。

也即是说使用前缀索引,定义好长度,就可以节省空间又不用额外增加太多的查询成本

那怎样定义前缀索引长度比较好呢?

实际上,建立索引时关注的是区分度,区分度越高,越能体现索引的价值和他的优势。因此我们可以通过统计索引上有不同的值来判断要使用多长的前缀。

select count(distinct email) as L from User;

Mysql 5.7 参考手册 - 前缀索引

总结

到此这篇关于mysql前缀索引的文章就介绍到这了,更多相关MySQL前缀索引内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: 一文简单了解MySQL前缀索引

本文链接: https://www.lsjlt.com/news/144853.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 一文简单了解MySQL前缀索引
    当要索引的列字符很多时 索引则会很大且变慢 ( 可以只索引列开始的部分字符串 节约索引空间 从而提高索引效率 ) 原则: 降低重复的索引值 例如现在有一个地区表 areagdpcod...
    99+
    2024-04-02
  • 了解MySQL前缀索引的重要性
    了解MySQL前缀索引的重要性,需要具体代码示例 在数据库系统中,索引是一种提高数据检索效率的重要工具。MySQL作为一个强大的关系型数据库管理系统,索引在其中起着至关重要的作用。在M...
    99+
    2024-03-14
    数据库 重要性 前缀索引
  • mysql前缀索引是什么
    这篇“mysql前缀索引是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“mysql前缀...
    99+
    2023-05-25
    mysql
  • 图文详解Mysql索引的最左前缀原则
    目录前言1. 定义2. 全索引顺序3. 部分索引顺序3.1 正序3.2 乱序4. 模糊索引5. 范围索引总结前言 之所以有这个最左前缀索引 归根结底是mysql的数据库结构 B+树 ...
    99+
    2024-04-02
  • 怎么理解并掌握mysql索引之前缀索引
    本篇内容主要讲解“怎么理解并掌握mysql索引之前缀索引”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解并掌握mysql索引之前缀索引”吧!有时候需要很长...
    99+
    2024-04-02
  • MySQL中前缀索引的原理解析
    MySQL中前缀索引的原理解析与代码示例 前缀索引是MySQL数据库中一种优化查询性能的技术,通过只对字段值的一部分进行索引来减小索引的大小,从而提升查询效率。本文将详细解析前缀索引的...
    99+
    2024-03-14
    原理 mysql 前缀索引
  • mysql前缀索引怎么设置
    在mysql中设置前缀索引的方法:1.命令行启动mysql服务;2.登录mysql;3.选择数据库;4.执行“CREATE INDEX '表名' ON products('列名'(13)); ”命令创建前缀索...
    99+
    2024-04-02
  • MySQL字符串前缀索引使用
    目录1. 前缀索引与全部索引概念2. 前缀索引与全部索引数据结构3. 前缀索引与全部索引引执行流程4. 前缀索引长度如何取舍5. 前缀索引对覆盖索引的影响6. 其他解决方案7. 梳理...
    99+
    2023-02-03
    MySQL字符串前缀索引 MySQL 前缀索引
  • MySQL索引左前缀匹配规则
    MySQL索引最左原则原理及代码示例 在MySQL中,索引是提高查询效率的重要手段之一。其中,索引最左原则是我们在使用索引优化查询的过程中需要遵循的一个重要原则。本文将围绕MySQL索...
    99+
    2024-02-24
    原理 mysql索引 最左原则
  • 如何在MySQL中使用前缀索引?
    如何在MySQL中使用前缀索引? MySQL是一款非常流行的关系型数据库管理系统,它支持使用索引来提高查询性能。在某些情况下,如果数据库表中的列具有较长的值,可以考虑使用前缀索引来减少...
    99+
    2024-03-15
    mysql 前缀索引
  • mysql中前缀索引指的是什么
    这篇文章主要为大家展示了“mysql中前缀索引指的是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中前缀索引指的是什么”这篇文章吧。1、说明有时候需要索引很长的字符列,索引变得又大...
    99+
    2023-06-15
  • MySQL的前缀索引有什么作用?
    MySQL的前缀索引有什么作用?(1500字) 导言 在MySQL数据库中,索引是一种提高数据检索效率的重要技术手段。前缀索引是一种特殊类型的索引,它可以在某些情况下有效地减小索引的大...
    99+
    2024-03-14
    mysql 作用 前缀索引 内存占用
  • 简单了解添加mysql索引的3条原则
    一,索引的重要性 索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行。表越大,花费的时间越多。如果表中查询的列有一个索引,MySQL能快速到达...
    99+
    2024-04-02
  • MySQL中前缀索引的优势和用法
    MySQL中前缀索引的优势和用法 在MySQL数据库中,索引是提高查询效率的重要手段之一。除了常见的全字段索引外,还有一种特殊的索引叫做前缀索引。本文将介绍前缀索引的优势和用法,并附上...
    99+
    2024-03-14
    mysql 优势 前缀索引
  • 关于MySQL的索引之最左前缀优化详解
    目录一、联合索引联合索引执行示例二、索引的 order by优化mysql中的排序方式数据准备无索引有索引where子句索引字段顺序不一致order by索引字段顺序不一致索引字段升降序不一致三、总结一、联合索...
    99+
    2023-05-16
    MySQL索引 MySQL最左前缀优化
  • Mysql索引的最左前缀原则是什么
    这篇文章主要介绍了Mysql索引的最左前缀原则是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Mysql索引的最左前缀原则是什么文章都会有所收获,下面我们一起来看看吧。前言之所以有这个最左前缀索引归根结底是...
    99+
    2023-06-29
  • MySQL---单列索引(包括普通索引、唯一索引、主键索引)、组合索引、全文索引。
    1. 索引 索引是通过某种算法,构建出一个数据模型,用于快速找出在某个列中有一特定值的行,不使用索 引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的 时间就越多,如果表中查询的列有一个索引,MySQL...
    99+
    2023-09-21
    数据库 mysql sql
  • 一文了解MySQL二级索引的查询过程
    目录前言联合索引总结前言 聚簇索引就是innodb默认创建的基于主键的索引结构,而且表里的数据就是直接放在聚簇索引里,作为叶节点的数据页: 基于主键的数据搜索:从聚簇索引的根节点开...
    99+
    2024-04-02
  • 关于对MongoDB索引的一些简单理解
    目录索引简介1.语法准备 2.数据准备: 3.索引 3.1 唯一索引 3.2 单键索引 3.3 多键索引 3.4 复合索引 3.5 交叉索引 3.6 部分索引 3.7覆盖索引 3.8...
    99+
    2024-04-02
  • 简单谈谈Mysql索引与redis跳表
    摘要 面试时,交流有关mysql索引问题时,发现有些人能够涛涛不绝的说出B+树和B树,平衡二叉树的区别,却说不出B+树和hash索引的区别。这种一看就知道是死记硬背,没有理解索引的本质。本文旨在剖析这背后的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作