前缀索引是指仅利用索引字段的前一部门建立的索引。相较而言,前缀索引可以减小索引的大小,且在索引的长度选择的比较是当地额情况下,并不会太多地降低索引的选择性。合适的前缀索引应当在选择性和索引大小之间取得平衡。在创建前缀索引之前,应当对数据的分布情况进行测试。在对字段建立前缀索引之前,先计算字段的选择性,在测试不同长度的字段的前缀索引的选择性,在选择性较理想的情况下建立索引。
可以使用如下SQL语句去计算某个字段的选择性:
select count(distinct [column]) / count(*) as lenFull from [tableName]
使用如下SQL语句计算某长度的前缀索引的选择性:
select count(distinct left ([column], 4)) / count(*) as len4 ,
count(distinct left ([column], 5)) / count(*) as len5 ,
count(distinct left ([column], 6)) / count(*) as len6 ,
count(distinct left ([column], 7)) / count(*) as len7 ,
count(distinct left ([column], 8)) / count(*) as len8 from [tableName]
有表如下:
name_py |
name_zh |
boxigua |
薄西瓜
|
houxigua |
厚冬瓜
|
liuyishou |
刘一手 |
liuerniu |
刘二牛 |
lidaniu |
李大牛 |
lierniu |
李二牛 |
lisanniu |
李三牛 |
wangfeng |
汪峰
|
wangliyan |
王立言 |
wanglide |
王立德 |
wangligong |
王立功 |
wangsanli |
王三立 |
zhangchu |
张楚 |
zhangliming |
张黎明 |
zhaliangyong |
查良镛 |
zhaliangyong |
查良永
|
wangliyan |
汪力言 |
字段选择性测试与定长索引选择性测试结果如下:
另外,使用聚集函数对定长前缀的结果分组结果如下:
所以,选择长度8构造前缀索引比较合适。选择性较高且不会出现特定的“黑洞”(必出长度为2的时候,li和liu这俩大姓混在一起,对li的查询索引的选择性就太差)
- 大小: 16.3 KB
- 大小: 61.9 KB
- 大小: 66.1 KB
分享到:
相关推荐
索引可以包含一个或多个列的值,如果索引包含多个列,那么列的顺序也十分重要,因为MySQL只能高效地使用索引的最左前缀。创建一个包含两个列的索引,和创建两个包含只包含一列的索引是大不相同的。
### MySQL高级笔记知识点详解 #### 一、索引优化 **1.1 索引基本概念** - **定义**:索引是帮助MySQL高效获取数据的数据结构。 - **类型**: - **唯一索引**:确保每条记录都是唯一的。 - **主键索引**:一种...
前缀索引的创建和使用可以在创建表时或者修改表结构时完成,比如在地址字段上建立前缀索引。但需要注意选择合适的前缀长度,以平衡索引的存储空间和搜索效率。 6. MySQL存储引擎与事务支持: 不同的MySQL存储引擎对...
笔记部分可能包括了对MySQL关键概念的解释、源码阅读的心得、性能调优技巧、问题排查方法等。例如: 1. 数据库设计:笔记可能会讨论如何设计高效的数据库模式,包括范式理论的应用、主键和外键的设置。 2. 索引...
MySQL中的索引是一种为了加速数据检索而创建的数据结构,它基于B树模型,能显著提升查询效率,尤其是在大型数据集中。索引的主要目的是减少数据库在查找特定数据时需要扫描的数据量,从而加快查询速度,同时也可支持...
MySQL面试题涵盖了许多核心知识点,包括索引使用、死锁处理、SQL优化、数据库引擎对比、分布式主键选择以及事务管理等。以下是对这些主题的详细解析: 1. **索引使用注意事项**: - 索引在含有`OR`、`LIKE`通配符...
在MySQL中,索引是数据库性能优化的关键技术之一。一个索引实际上对应于一棵B+树,这棵树中的每一个节点代表一个数据页,通常一个页会占用16KB的存储空间。因此,索引本身也会占用一定的磁盘空间。 - **B+树结构**...
总的来说,理解索引的工作原理、掌握覆盖索引和最左前缀原则,是进行SQL优化和提高数据库性能的关键。通过对索引的合理设计,可以有效地减少数据检索的时间,提高应用程序的响应速度。同时,应当注意避免过度使用...
oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...
当两个表有相同字段时必须加前缀,列名前需加表名和“.”,如“s_emp.id”。 1、用法:SELECT columns,prod2,prod3<列> FROM Table1,table2<表名> 分号结束 如: select id from s_emp; select last_name,name ...