`

前缀索引

 
阅读更多

应用场景:

数据库里有个地址(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前缀索引详析 #### 概述 集成电路(Integrated Circuit, IC)作为现代电子技术的核心组成部分,在各个领域发挥着至关重要的作用。为了方便识别和管理,不同制造商生产的集成电路通常会带有特定的前缀标识...

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

    前缀索引是一种特殊的索引类型,它允许我们只对字符串的起始部分创建索引,而不是整个字符串。这在处理大字符串时尤其有用,因为完全索引可能会占用大量存储空间,并可能导致插入、更新和删除操作变慢。 首先,我们...

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

    本篇文章将深入分析一个特定案例,即“前缀索引”如何导致慢查询,并探讨其背后的原理。 首先,让我们回顾一下问题的背景。在一个与DB相关的项目中,开发者发现一个查询在使用索引后执行速度显著变慢。通过`EXPLAIN...

    分区索引,本地索引,全局索引的区别

    - **非前缀索引**:如果索引的列不是以分区键开头,或者不包含分区键列,则该索引称为非前缀索引(Non-Prefix Local Index)。 - **分区消除**:前缀和非前缀索引都支持索引分区消除,但前提是查询条件中需包含索引...

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

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

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

    尽量使用前缀来索引;删除不再使用或者很少使用的索引。 在实践中,我们可以使用 CREATE INDEX 语句创建索引,ALTER TABLE 语句修改索引,DROP INDEX 语句删除索引。例如,创建一个唯一性索引:CREATE TABLE ...

    深入oracle分区索引的详解

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

    MySQL数据库:创建索引.pptx

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

    MySQL索引机制(详细+原理+解析).doc

    但是前缀索引也有它的坏处:MySQL 不能在 ORDER BY 或 GROUP BY 中使用前缀索引,也不能把它们用作覆盖索引(Covering Index)。 2. 复合索引 复合索引是指一个索引包含多个列,例如在一个表中有多个列都需要建立...

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

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

    mysql高性能索引查询(查询性能问题、索引使用原则、索引创建、索引的优点缺点).docx

    前缀索引是一种特殊的索引类型,用于文本字段,特别是当字段值较长时,可以只索引每个值的一部分(前缀),以减少索引的大小并提高性能。 例如,如果`ds_order`表中的`order_no`字段值很长,可以创建一个前缀索引,...

    怎么给字符串字段加索引?.pdf

    在MySQL中,支持为字符串字段创建前缀索引,这是一种节省存储空间且在某些情况下保持良好查询效率的方法。 前缀索引允许你指定字符串的一部分作为索引,而不是整个字符串。例如,创建`email`字段的前缀索引可以这样...

    80设计索引的时候,我们一般要考虑哪些因素呢?(下).pdf

    这时,可以考虑使用前缀索引,即只对字符串的前几个字符进行索引,这样可以在保证查询效率的同时,减少索引的存储空间。 再者,在设计索引时,需要注意避免在索引字段上使用函数或计算。比如,使用where function(a...

    mysql多条件索引

    对于含有大量文本的数据类型,如`TEXT`和`BLOB`,可以使用前缀索引,即仅索引字段的前几个字符,以节省存储空间。 多列索引则是在两个或更多列上建立的索引,它适用于多个查询条件的情况。然而,多列索引的使用有其...

    ORACLE索引详解及SQL优化

    3. **操作符**:某些操作符如`NOT`、`BETWEEN`、`LIKE`的模糊匹配可能导致索引失效,除非使用了前缀索引或全文索引。 4. **索引选择性**:索引的选择性越高,区分度越大,使用索引的效果越好。如果索引列的值过于...

    MySQL创建索引,查看以及删除

    3. 使用前缀索引:对于长字符串列,可以只索引前几个字符,以减少索引存储空间。 4. 维护索引:定期分析和优化表,删除无用或低效的索引。 在实际应用中,可以使用MySQL的`EXPLAIN`命令来分析查询计划,理解索引的...

    MySQL索引背后的数据结构及算法原理

    前缀索引可以在降低存储空间需求的同时,保持较高的选择性。 3. InnoDB的主键选择:主键是聚簇索引的键,选择性好的主键(例如,UUID或自增ID)可以减少插入时的页分裂,提高性能。 理解这些基础知识有助于我们更好...

    1-5+Doris物化视图、索引的典型应用案例.pdf

    前缀索引的原理是将一行数据的前 36 个字节作为该行数据的前缀索引。当遇到 VARCHAR 类型时,前缀索引会直接截断。 例如,创建一个 user_id、age 和 message 三个列的前缀索引: ```sql CREATE INDEX idx_user_id_...

Global site tag (gtag.js) - Google Analytics