`
itace
  • 浏览: 181284 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

mysql索引建立和使用原则

阅读更多

 

1. 最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。
2. =和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式。
3. 尽量选择区分度高的列作为索引,区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就是0,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条记录
4. 索引列不能参与计算,保持列“干净”,比如from_unixtime(create_time) = ‘2015-08-14’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本太大。所以语句应该写成create_time = unix_timestamp(‘2015-08-14’)。
5. 尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。
6. 在order by或者group by子句中,如果想通过索引来进行排序,所建索引列的顺序必须与order by或者group by子句的顺序一致,并且所有列的排序方向(倒序或者正序)都一样;如果查询关联多张表,则只有order by子句引用的字段全部来自第一张表时,才能利用索引来排序;order by或者group by语句与查询型语句的限制是一样的:需要满足索引的最左前缀原则;否则mysql就要执行排序操作,无法利用索引来排序;(有一种情况order by或者group by子句可以不满足最左前缀原则,就是其前导为常量的时候,如果where或者join对这些列指定了常量,就可以弥补索引的不足)。

 

 

 来源:https://yq.aliyun.com/articles/6901?hmsr=toutiao.io&amp;utm_medium=toutiao.io&amp;utm_source=toutiao.io

分享到:
评论

相关推荐

    mysql存储与索引技术

    在索引优化方面,最左前缀原则是一个关键概念,这意味着复合索引只能按照索引创建时列的顺序部分使用,例如,INDEX(A, B, C)可以用于 WHERE A = x 或 WHERE A = x AND B = y 的查询,但不能单独用于 WHERE B = y 或 ...

    MYSQL索引知识

    2. **MySQL索引的优缺点和使用原则**: - **优点**:可以给任何列创建索引,提升查询速度。 - **缺点**:创建和维护索引需要时间,占用额外存储空间,且影响数据的增删改操作速度。 使用索引时应遵循一定的原则...

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

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

    Mysql数据库索引创建、索引删除、索引失效场景详解

    然而,全文索引的使用受到MySQL版本、存储引擎和字段类型的限制。例如,MySQL5.6之前,全文索引仅限于MyISAM引擎,而5.6之后的InnoDB引擎也开始支持。 除了创建索引,索引管理还包括删除。在MySQL中,可以使用`DROP...

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

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

    mysql索引优化分享

    关于mysql索引一些优化介绍与创建原则,还有对order by排序的算法的介绍等等

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

    这种类型的索引易于创建和使用,适用于那些频繁查询单一字段的情况。 例如,为了提高基于用户ID的查询效率,可以在`ds_order`表中为`user_id`字段创建索引。 ```sql CREATE INDEX user_id_index ON ds_order(user_...

    MySQL索引分析和优化

    MySQL索引分析和优化是数据库管理中的重要环节,它直接影响到数据查询的速度和数据库的性能。索引可以被看作是数据库中的一种特殊文件,它按照特定的规则组织,允许数据库快速定位到所需的数据行。 首先,我们来看...

    mysql索引失效.docx MySQL索引失效是指在查询执行过程中,数据库无法有效地使用索引来提高查询性能

    ### MySQL索引失效详解 #### 一、引言 在日常工作中,SQL是不可或缺的技术工具之一,但在实际操作中,不少开发人员对于SQL优化及索引的理解并不深入。特别是当数据量逐渐增大时,索引的正确使用与否直接影响着系统...

    mysql 索引失效详解

    MySQL 索引失效详解 MySQL 索引是一种加快数据检索速度的数据库对象。...因此,了解索引的使用原则和索引长度计算公式非常重要。同时,了解索引失效的原因和解决方法也非常重要,以便更好地优化查询语句和数据库性能。

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

    MySQL 索引的分类包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引。索引设计的原则包括:选择唯一性索引;为经常需要排序、分组和联合操作的字段建立索引;为常作为查询条件的字段建立索引;限制...

    mysql多条件索引

    MySQL中的索引是一种提高...总结起来,MySQL的多条件索引利用了最左前缀原则,提高了复杂查询的执行速度,但设计合理的索引结构和顺序至关重要。通过理解这些原理,我们可以更有效地优化数据库,提升系统的整体性能。

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

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

    MySQL-数据库-索引详解

    MySQL 索引包括普通索引、惟一性索引、全文索引、单列索引、多列索引和空间索引。 #### 普通索引 创建普通索引时,不附加任何限制条件。可以创建在任何数据类型上,其值是否唯一和非空由字段自身的完整性约束条件...

    MySQL索引及其原理1

    MySQL索引是数据库管理系统中用于加速数据检索的关键技术。它基于特定的数据结构,如B+树,以提高查询效率,避免全表扫描。在本文中,我们将深入理解MySQL索引的定义、类型、原理以及如何在实践中有效利用它们。 1....

    MySQL索引_011

    通过掌握索引的创建、使用和管理,开发者可以更好地设计数据库架构,为应用程序提供更好的服务。为了深入学习,建议系统阅读相关的技术书籍,以获得更全面的理解。同时,实践是检验理论的最好方式,通过实际操作和...

    MySQL组合索引与最左匹配原则详解

    之前在网上看到过很多关于mysql联合索引最左前缀匹配的文章,自以为就了解了其原理,最近面试时和面试官交流,发现遗漏了些东西,这里自己整理一下这方面的内容。 什么时候创建组合索引? 当我们的where查询存在多个...

    mysql面试题,涉及MySQL基础、MySQL索引、MySQL语句 MySQL进阶等方面,适用于初、中级开发人员

    在 MySQL 中,联合索引的建立遵循最左匹配原则,也就是说,索引的建立顺序是从左到右的。例如,在一张表 test 中建立了联合索引(a,b,c),使用下面的 SQL 语句问那些语句用到了索引?根据索引的最左匹配原则,...

Global site tag (gtag.js) - Google Analytics