iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >怎么理解并掌握mysql索引之前缀索引
  • 579
分享到

怎么理解并掌握mysql索引之前缀索引

2024-04-02 19:04:59 579人浏览 八月长安
摘要

本篇内容主要讲解“怎么理解并掌握Mysql索引之前缀索引”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解并掌握mysql索引之前缀索引”吧!有时候需要很长

本篇内容主要讲解“怎么理解并掌握Mysql索引之前缀索引”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解并掌握mysql索引之前缀索引”吧!

有时候需要很长的索引字符串,这样会使得索引变的很大而且很慢.通常可以索引开始的部分字符,这样可以大大节省空间提升索引效率,但这样也会降低索引的选择性.索引的选择性是指,不重复的索引值和数据表的记录总数的比值,范围从1#T到1之间.索引的选择性越高则查询效率越高,因为选择性高的索引可以让mysql在查找时过滤掉更多的行,唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的.

    一般情况下某个列前缀的选择性也是足够高的,足以满足查询性能.对于BLOB,TEXT或者很长的varchar类型的列,必须使用前缀索引,因为mysql不允许索引这些列的完整长度.

    诀窍在于要选择足够长的前缀以保证较高的选择性,同时又不能太长.前缀长的选择性接近于索引整个列.换句话说,前缀的基数应该接近于完整列的基数.

    为了决定前缀合适长度,需要找到最常见值的列表,然后和最常见的前缀列表进行比较.

如下构建一张表:

mysql> use sakila;
Reading table infORMation for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> create table city_demo(city varchar(50) not null);
Query OK, 0 rows affected (0.15 sec)
mysql> insert into city_demo(city) select city from city;
Query OK, 600 rows affected (0.11 sec)
Records: 600  Duplicates: 0  Warnings: 0
mysql> insert into city_demo(city) select city from city_demo;
Query OK, 600 rows affected (0.09 sec)
Records: 600  Duplicates: 0  Warnings: 0
mysql> update city_demo set city=(select city from city order by rand() limit 1);
Query OK, 1196 rows affected (0.85 sec)
Rows matched: 1200  Changed: 1196  Warnings: 0

有了数据集,数据分布不是真实分布,仅为演示.首先找到最常见的城市列表:

mysql> select count(*) as cnt,city from city_demo group by city order by cnt desc limit 10;
+-----+-------------------------+
| cnt | city                    |
+-----+-------------------------+
|   7 | Oshawa                  |
|   7 | Uijongbu                |
|   7 | Ktahya                  |
|   6 | Haiphong                |
|   6 | Berhampore (Baharampur) |
|   6 | Urawa                   |
|   6 | Mysore                  |
|   6 | Witten                  |
|   6 | Sunnyvale               |
|   6 | Esfahan                 |
+-----+-------------------------+
10 rows in set (0.01 sec)

如上每个值都出现了6-7次,现在找出最频繁出现城市的前缀,先从前缀字母开始:

mysql> select count(*) as cnt,left(city,3) as pref from city_demo group by pref order by cnt desc limit 10;
+-----+------+
| cnt | pref |
+-----+------+
|  28 | San  |
|  16 | Cha  |
|  14 | Hal  |
|  12 | al-  |
|  11 | Bat  |
|  11 | Shi  |
|  10 | Val  |
|  10 | Ben  |
|  10 | Bra  |
|   9 | Tar  |
+-----+------+
10 rows in set (0.00 sec)

每个前缀出现的都比原来城市次数多,因此唯一前缀比唯一城市要少得多,然后增加前缀长度,直到这个前缀的选择性接近完整列的选着性,计算合适前缀长度的一个办法计算完整列的选择性,并使前缀的选择性趋于完整列的选择性.如下计算完整列的选择性:

mysql> select count(distinct city)/count(*) from city_demo;
+-------------------------------+
| count(distinct city)/count(*) |
+-------------------------------+
|                        0.4300 |
+-------------------------------+
1 row in set (0.01 sec)

计算前缀选择性趋于或接近0.43这个值:

mysql> select count(distinct left(city,3))/count(*) from city_demo;
+---------------------------------------+
| count(distinct left(city,3))/count(*) |
+---------------------------------------+
|                                0.3350 |
+---------------------------------------+
1 row in set (0.01 sec)
mysql> select count(distinct left(city,4))/count(*) from city_demo;
+---------------------------------------+
| count(distinct left(city,4))/count(*) |
+---------------------------------------+
|                                0.4058 |
+---------------------------------------+
1 row in set (0.00 sec)
mysql> select count(distinct left(city,5))/count(*) from city_demo;
+---------------------------------------+
| count(distinct left(city,5))/count(*) |
+---------------------------------------+
|                                0.4208 |
+---------------------------------------+
1 row in set (0.00 sec)
mysql> select count(distinct left(city,6))/count(*) from city_demo;
+---------------------------------------+
| count(distinct left(city,6))/count(*) |
+---------------------------------------+
|                                0.4267 |
+---------------------------------------+

查询显示当前缀长度达到5的时候,再增加长度,选择性提升幅度已经不大.

只看平均选择性是不够的,也有列外情况,需要考虑最坏情况下的选择性,平均选择性会让你认为前缀长度为3或4的索引已经足够,但是如果数据分布很不均匀就会有陷阱.

上面示例如果找到合适前缀长度,下面示例如何创建前缀索引:

mysql> alter table city_demo add key(city(5));
Query OK, 0 rows affected (0.34 sec)
Records: 0  Duplicates: 0  Warnings: 0

到此,相信大家对“怎么理解并掌握mysql索引之前缀索引”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: 怎么理解并掌握mysql索引之前缀索引

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

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

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

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

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

  • 微信公众号

  • 商务合作