`

前缀索引

阅读更多

应用场景:

数据库里有个地址(address)字段,类型为varchar(100),业务决定了要经常根据address来进行查询。

确定选择性:

SELECT count(DISTINCT(address))/count(*) AS Selectivity FROM info;  
+-------------+   
| Selectivity |  
+-------------+   
|      0.8745 |  
+-------------+  
 


<address>选择性很好,但是长度为100,对整个字段建立索引显然不合适,可以考虑建立前缀索引,例如<left(address,5)>,看看其选择性:

SELECT count(DISTINCT(left(address,5)))/count(*) AS Selectivity FROM info;  
+-------------+   
| Selectivity |  
+-------------+   
|      0.5981 |  
+-------------+  
 


 


选择性还不错,但和0.8745相比还是太低,所以我们可以将前缀长度增加到10,再看看选择性:

SELECT count(DISTINCT(left(address,10)))/count(*) AS Selectivity FROM info;  
+-------------+   
| Selectivity |  
+-------------+   
|      0.8239 |  
+-------------+  
 

和0.8745已经很接近了,但是索引长度只有10,所以就可以决定建立前缀索引了。

前缀索引兼顾索引大小和查询速度,但是其缺点是不能用于ORDER BY和GROUP BY操作,也不能用于Covering index(即当索引本身包含查询所需全部数据时,不再访问数据文件本身)。

分享到:
评论

相关推荐

    国外IC前缀索引.pdf

    国外IC前缀索引.上百家国外公司器件前缀总结

    通过实例认识MySQL中前缀索引的用法

    主要通过实例来介绍MySQL中的前缀索引,包括前缀在实际使用中需要考虑到的长度问题等,需要的朋友可以参考下

    bjmashibing#InternetArchitect#前缀索引实例说明1

    --此时前缀的选择性接近于完整列的选择性--还可以通过另外一种方式来计算完整列的选择性,可以看到当前缀长度到达7之后,再增加前缀长度,选择性提升的幅度已经很小了

    MySQL前缀索引导致的慢查询分析总结

    前端时间跟一个DB相关的项目,alanc反馈有一个查询,使用索引比不使用索引慢很多倍,有点毁三观。所以跟进了一下,用explain,看了看2个查询不同的结果。 不用索引的查询的时候结果如下,实际查询中速度比较块。 ...

    深入oracle分区索引的详解

    3.如果局部索引的列不是以分区键开头,或者不包含分区键列,则称为非前缀索引。4.局部索引只能依附于分区表上。5.前缀和非前缀索引都可以支持索引分区消除,前提是查询的条件中包含索引分区键。6.局部

    JAVA面试题MySQL索引原理及索引优化校招面试找工作笔试

    JAVA面试题MySQL索引原理及索引优化校招面试找工作笔试 目录: 基本概念 ...索引选择性,行数前缀索引 所谓索引的选择性是指不重复的索引值与表记录数的比值 索引优化 最左前缀原则 Hash索引 介绍、特点。

    MySQL数据库:创建索引.pptx

    创建索引 数据索引 课程目标 理解 —— 创建索引的语法; 掌握 —— 在已有表上创建索引的方法; 掌握 —— 在修改表时添加索引的方法; 掌握 —— 在创建表时创建索引的方法...BLOB或TEXT列必须用前缀索引。 创建索引

    java8看不到源码-InstaTrie:Java的基于Trie的前缀索引

    高性能前缀索引和搜索词高亮器,使用特里数据结构实现。 主要特征 用于高效前缀查找的复杂通用数据结构 支持自定义提取器函数以从 POJO 中检索关键字 能够忽略(简单)HTML 标签 在搜索模型中突出显示找到的零件 ...

    mysql索引与视图的实例附答案.docx

    mysql索引与视图的实例附答案.docx

    MySQL中字符串索引对update的影响分析

    对某一个类型为varchar的字段添加前缀索引后,基于该子段的条件查询时间基本大幅下降;但对于update操作,所耗的时间却急剧上升,主要原因是在更新数据的同时,mysql会执行索引的更新。 下面做了一个简单的试验。 (1...

    Mysql 进阶修行学习

    索引:结构、Btree、索引分类、索引语法、性能分析、执行频次、慢查询日志、show profiles、explain、使用规则(验证索引效率、最左前缀法则、索引失效情况、SQL提示、覆盖索引&回表查询、前缀索引、单列&联合索引、...

    数据库面试资料,面试经常问

    1.索引 是什么?  1.MySQL官方对索引的定义为:索引是帮助MySQL高效获取数据...中聚集索引、次要索引、覆盖索引、复合索引、前缀索引、唯一索引默认都是使用B+树索 引,统称索引。当然,除了B+树之外,还有哈希索引。

    Sql面试题2023秋招精选

    7.索引怎么设计(优化) ①选择唯一性索引:值是唯一的,查询的更快。 ②经常作为查询条件的字段加索引。 ③为经常需要排序、分组...⑧使用前缀索引,要是字符串越长,那么索引占的空间越大,并且比较起来就时间就越长。

    mysql数据库中的索引

     1.4 MySQL不支持函数索引,支持前缀索引【对索引字段的钱N个字符创建索引(MyISAM N=1000B,InnoDB N=767B;创建表的前缀长度是以字符为单位的,使用多字节字符集的时候需要注意】;  1.5 MyISAM支持全文本索引...

    mysql 索引详细介绍

    2.匹配最左前缀索引查询  比如:在userid 和 date字段上创建联合索引。 那么如果输入 userId作为条件,那么这个userid可以使用到索引,如果直接输入 date作为条件,那么将不能使用到索引。  3.匹配列前缀查询 比如...

    聚簇索引与主键的选择

    聚簇索引与主键的选择一、什么是聚簇索引?二、什么是非聚簇索引?1. InnoDB引擎中2. MyISAM引擎中三、聚簇索引的优劣与主键选择的关系 ...主键索引就是一种聚簇索引,而其他创建出来的前缀索引、联合索引,唯

    高性能MySQL(第3版).part2

    5.3.2前缀索引和索引选择性153 5.3.3多列索引157 5.3.4选择合适的索引列顺序159 5.3.5聚簇索引162 5.3.6覆盖索引171 5.3.7使用索引扫描来做排序175 5.3.8压缩(前缀压缩)索引177 5.3.9冗余和重复索引178 ...

    MySQL中索引与视图的用法与区别详解

    mysql支持BTREE索引、HASH索引、前缀索引、全文本索引(FULLTEXT)【只有MyISAM引擎支持,且仅限于char,varchar,text列】、空间列索引【只有MyISAM引擎支持,且索引的字段必须非空】,但不支持函数索引。 MyISAM和...

    mysql索引学习教程

    2.匹配最左前缀索引查询 比如:在userid 和 date字段上创建联合索引。 那么如果输入 userId作为条件,那么这个userid可以使用到索引,如果直接输入 date作为条件,那么将不能使用到索引。 3.匹配列前缀查询 比如...

Global site tag (gtag.js) - Google Analytics