`
yukar
  • 浏览: 127951 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

理解单列索引、多列索引以及最左前缀原则

阅读更多

通过实例理解单列索引、多列索引以及最左前缀原则

实例:现在我们想查出满足以下条件的用户id:
mysql>SELECT `uid` FROM people WHERE lname`='Liu'  AND `fname`='Zhiqun' AND `age`=26
因为我们不想扫描整表,故考虑用索引。

单列索引:
ALTER TABLE people ADD INDEX lname (lname);
将lname列建索引,这样就把范围限制在lname='Liu'的结果集1上,之后扫描结果集1,产生满足fname='Zhiqun'的结果集2,再扫描结果集2,找到 age=26的结果集3,即最终结果。

由 于建立了lname列的索引,与执行表的完全扫描相比,效率提高了很多,但我们要求扫描的记录数量仍旧远远超过了实际所需 要的。虽然我们可以删除lname列上的索引,再创建fname或者age 列的索引,但是,不论在哪个列上创建索引搜索效率仍旧相似。

2.多列索引:
ALTER TABLE people ADD INDEX lname_fname_age (lame,fname,age);
为了提高搜索效率,我们需要考虑运用多列索引,由于索引文件以B-Tree格式保存,所以我们不用扫描任何记录,即可得到最终结果。

注:在mysql中执行查询时,只能使用一个索引,如果我们在lname,fname,age上分别建索引,执行查询时,只能使用一个索引,mysql会选择一个最严格(获得结果集记录数最少)的索引。

3.最左前缀:顾名思义,就是最左优先,上例中我们创建了lname_fname_age多列索引,相当于创建了(lname)单列索引,(lname,fname)组合索引以及(lname,fname,age)组合索引。

注:在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。

分享到:
评论

相关推荐

    MySQL索引使用说明(单列索引和多列索引)

    本文将深入探讨单列索引和多列索引的使用,并介绍多列索引中的最左前缀原则。 1. 单列索引 单列索引,顾名思义,是在单个列上创建的索引。创建索引的主要目的是优化WHERE子句和JOIN子句中的列。例如,如果一个查询...

    mysql多条件索引

    然而,多列索引的使用有其特定规则,被称为“最左前缀原则”。这意味着查询条件必须从索引的第一列开始,并按照索引列的顺序匹配,直到遇到范围查询(如`, `LIKE`等)或者中间缺失某列。例如,对于`name, age, id`的...

    mysql索引(一篇就够).pdf

    3. 组合索引:由多个列组成的索引,只有查询条件涉及组合索引的最左侧列时,索引才会被有效利用(遵循最左前缀原则)。 4. Unique(唯一索引):索引列的值必须唯一,允许出现NULL值,但主键索引除外。 5. Key(普通...

    MySQL索引分析和优化

    多列索引的优势在于,即使只使用其中部分列进行查询,数据库也能利用索引来提高效率,这被称为最左前缀原则。例如,即使查询条件仅包含`firstname`,多列索引`fname_lname_age`也会被使用,因为它包含了`firstname`...

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

    复合索引遵循最左前缀匹配原则,即在查询时必须从左到右匹配索引的列。 3. 唯一索引 唯一索引是指索引列的值必须唯一,但允许有空值。唯一索引可以确保数据的唯一性。 4. 全文索引 全文索引是在 MySQL 5.6 版本...

    深入浅析Mysql联合索引最左匹配原则

    联合索引遵循最左前缀匹配原则,这是理解其工作方式的关键。这一原则指出,当创建一个包含多个列的联合索引(例如,`KEY test_col1_col2_col3 (col1, col2, col3)`),MySQL会构建三个子索引:`(col1)`,`(col1, col...

    MySQL-数据库-索引详解

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

    索引

    复合索引的顺序很重要,因为它是左前缀匹配原则,即索引会按照列的顺序从左到右进行匹配。 此外,还有唯一索引(UNIQUE INDEX)和主键索引。唯一索引确保索引中的每一项都是唯一的,但允许有NULL值。主键索引则是表...

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

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

    数据库的索引

    - 单列索引:一个索引只包含一个列,一个表可以有多个单列索引。 - 组合索引:组合索引是基于多个字段创建的索引,适用于需要多个字段组合查询的场景。 - 全文索引:全文索引适用于CHAR、VARCHAR、TEXT类型的字段,...

    MySQL数据库应用实战教程 第7章教案 索引.docx

    理解索引的使用策略,如全值匹配、最左前缀匹配、列前缀匹配、范围索引查询以及索引覆盖,对于优化查询性能至关重要。 最后,我们将学习各种类型的索引,包括主键索引、普通索引、唯一索引、单列索引与联合索引、聚...

    MySQL数据库应用实战教程 第7章教案 索引.pdf

    此外,还阐述了索引使用策略,如全值匹配、最左前缀匹配、列前缀匹配、范围查询以及仅索引查询。 索引的类型涵盖广泛,包括主键索引(不允许重复,且唯一标识一行)、普通索引(无唯一性要求)、唯一索引(不允许...

    mysql 索引分类以及用途分析

    多列索引遵循最左前缀原则,即在查询条件中使用索引的最左侧列时,整个索引才会被使用。例如,对于`fname_lname_age`索引,如果查询条件包含`fname`、`fname`和`lname`,或者`fname`单独,那么索引会被使用;但如果...

    计算机课程(数据库)-索引设计与优化

    例如,对于"users"表,可以先为"姓名"列创建单列索引,然后根据查询需求决定是否需要创建"姓名"、"年龄"和"地址"的复合索引。在索引维护上,除了定期更新统计信息,还需定期检查和删除不再使用的或低效的索引。 ...

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

    MySQL 中的索引可以分为普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等几种类型。 索引的设计原则包括: 1. 选择唯一性索引; 2. 为经常需要排序、分组和联合操作的字段建立索引; 3. 为常作为...

    Mysql之索引介绍

    - 组合索引是基于多个列创建的索引,只有当查询条件中使用了这些列的左边字段时,索引才会被有效利用,遵循“最左前缀”规则。 3. 全文索引: - 允许在定义索引的列上进行全文搜索,适用于文本数据,例如CHAR、...

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

    - **多列索引**:当索引包含多个列时,可以使用其中任意一个前缀来查找数据。 - **JOIN操作**:在执行联接操作时,可以从其他表中检索数据。 - **MIN/MAX值**:对于已索引的列,可以快速获取最小值或最大值。 - **...

Global site tag (gtag.js) - Google Analytics