`

提高MySQL索引策略二:前缀索引和索引的可选择度

    博客分类:
  • db
 
阅读更多

有的时候你需要对包含很长的文本数据进行索引,这不仅让索引占用非常大的空间,索引的检索效率也会非常低下,有一种策略是在该列上建立哈希类型的索引,但是有时候我们不想因为索引值的特殊性(长度)而增加它的维护成本,所以,我们有一种更通用的方式来解决上面的问题.

 

首先应该想到的是截断索引长度,通过对文本数据的前缀字符进行索引,达到不仅能节省空间,而且会使一部分查询变得快速,但是如果文本数据的可选择度很低,这种方式的性能提升就不是那么明显了.这里,索引的可选择度指的是索引列包含的唯一值数量与索引列所有数据行数的比例(T),一个高选择度的列索引会使MySQL在检索时过滤掉更多的数据,最好的一种情况是唯一索引,它的可选择度为1.

 

一般来讲,前缀索引都能提供不错的性能提升.如果对BLOB或者TEXT等可能会包含长文本数据的列进行索引,你应该定义一个前缀索引,MySQL默认会不会以文本的总长度进行索引.有个简单的办法就是选择足够长但是又能节省空间的索引长度来使可选择度的最大.一种简单的方式就是通过查询出不同指定长度的数据和所有数据的比例来进行比较,如果这种比例随着长度的增大而开始趋于平滑则选用其长度作为索引长度,如下sql

mysql> SELECT COUNT(DISTINCT LEFT(field, 3))/COUNT(*) AS sel3,
-> COUNT(DISTINCT LEFT(field, 4))/COUNT(*) AS sel4,
-> COUNT(DISTINCT LEFT(field, 5))/COUNT(*) AS sel5,
-> COUNT(DISTINCT LEFT(field, 6))/COUNT(*) AS sel6,
-> COUNT(DISTINCT LEFT(field, 7))/COUNT(*) AS sel7
-> FROM table;

 ,上面的方式虽然简单但是总有一些最坏情况,比如查询时总是查询出那些重复出现次数较大的数据,这样虽然平均值趋于平滑,但是索引在过滤数据时总是不能够去除这些重复度较高的索引值,所以,这种方式有时不能够得到一个很好的索引长度.

 

另一种获得较好的索引长度的方法是将不同长度的数据值以及它的出现次数,如下sql

mysql> SELECT COUNT(*) AS cnt, LEFT(field, 3) AS pref
-> FROM table GROUP BY pref ORDER BY cnt DESC LIMIT 10;

 对不同的长度进行查询,最后将结果和最长索引长度的查询结果进行比较,如果出现次数较高的若干个重复值和它相差不大,则可以选用其作为合适的索引长度

分享到:
评论

相关推荐

    MySQL 索引最佳实践

    ### MySQL索引最佳实践 #### 理解索引的重要性 在数据库管理中,索引是一种数据结构,用于提高查询速度。它对于开发者和数据库管理员(DBA)来说至关重要。索引选择不当可能会导致生产环境中的诸多问题。尽管索引...

    MySQL索引最佳实践

    #### 二、MySQL索引类型详解 ##### 1. B-Tree索引 - **定义**:B-Tree(平衡树)是最常见的索引类型,在大多数情况下使用的索引都属于此类。B-Tree能够支持范围查找、前缀查找以及等值查找等多种操作。 - **特点**...

    mysql存储与索引技术

    MySQL 数据库是一个广泛使用的开源关系型数据库管理系统,其性能很大程度上取决于存储引擎和索引的选取与使用。本文将深入探讨 MySQL 中的存储引擎和索引技术,帮助优化数据库性能。 首先,MySQL 提供了多种存储...

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

    - **分区消除**:前缀和非前缀索引都支持索引分区消除,但前提是查询条件中需包含索引分区键。 - **唯一性约束**:本地索引只支持分区内的唯一性,如果要在表上设置唯一性约束,必须包含分区键列。 - **可用性**:...

    高效MySQL查询加速指南:索引策略、查询优化、性能调优,助力数据库管理员和开发者突破性能瓶颈

    - **前缀索引的应用**:对于字符串类型的列,可以使用前缀索引来提高索引效率,同时节省存储空间。 #### 四、查询缓存 1. **利用 MySQL 的查询缓存**: - **查询缓存的工作原理**:对于相同的查询,MySQL会从...

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

    通过对MySQL索引背后的数据结构和算法原理的深入理解,我们可以更好地优化数据库查询,提高系统的整体性能。无论是对于初学者还是资深工程师来说,掌握这些基础知识都是非常重要的。未来,随着数据库技术的不断发展...

    mysql索引介绍学习

    MySQL索引介绍学习 MySQL索引是一种数据结构,用于帮助MySQL高效获取数据。索引的本质是一种排序的数据结构,可以快速查找数据。MySQL官方定义:索引(Index)是帮助MySQL高效获取数据的数据结构。 索引存在于哪里...

    MySQL索引不会被用到的情况汇总

    联合索引:索引列有多个字段,使用时需要满足最左前缀原则 普通索引 这是最基本的索引,它没有任何限制。它有以下几种创建方式: 1.创建索引 代码如下: CREATE INDEX indexName ON mytable(username(length)); ...

    MySQL数据库:创建索引.pptx

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

    MySQL索引的数据结构与算法.pptx

    ### MySQL索引的数据结构与算法 #### 一、MySQL存储引擎概述 MySQL提供了多种存储引擎以适应不同的应用场景。其中,最常用的包括InnoDB、MyISAM、MEMORY等。每种存储引擎都有其特点和适用场景。 - **InnoDB**:...

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

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

    mysql索引与视图的实例附答案宣贯.pdf

    mysql索引与视图实例附答案宣贯 在本篇文章中,我们将探讨 MySQL 中的索引和视图这两个重要概念,并通过实例和答案来宣贯相关知识点。 索引概念: 索引是一种数据结构,它可以提高查询的速度。索引可以创建在表上...

    MySQL索引原理及慢查询优化1

    MySQL索引原理及慢查询优化是数据库管理中的重要主题,尤其是在高并发、大数据量的互联网环境中,优化查询性能对于系统的整体效能至关重要。MySQL作为广泛使用的开源关系型数据库,其索引机制和查询优化技巧是开发者...

    给开发童鞋的MySQL索引学习漫画

    通过以上内容的学习,我们不仅了解了MySQL索引的基本概念和工作原理,还掌握了如何合理地设计和维护索引,这对于提高数据库性能和整体系统的运行效率至关重要。希望每位开发者都能够掌握这些知识,在实际工作中灵活...

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

    它们能够减少搜索数据的时间,提高查询效率,但同时也会占用额外的存储空间,并且在插入、更新和删除数据时可能需要维护索引,这可能会降低写操作的性能。 MySQL支持多种类型的索引,包括: 1. **Hash索引**:主要...

Global site tag (gtag.js) - Google Analytics