`

MySQL单列索引和组合索引的区别介绍

 
阅读更多

(转自)http://blog.csdn.net/xgbjmxn/article/details/6200733
MySQL单列索引是我们使用MySQL数据库中经常会见到的,MySQL单列索引和组合索引的区别可能有很多人还不是十分的了解,下面就为您分析两者的主要区别,供您参考学习。

  为了形象地对比两者,再建一个表:

 

CREATE TABLE myIndex ( i_testID INT NOT NULL AUTO_INCREMENT,
vc_Name VARCHAR(50) NOT NULL,
vc_City VARCHAR(50) NOT NULL, i_Age INT NOT NULL, i_SchoolID INT NOT NULL,
PRIMARY KEY (i_testID) );

 

  在这 10000 条记录里面 7 上 8 下地分布了 5 条 vc_Name="erquan" 的记录,只不过 city,age,school 的组合各不相同。

  来看这条T-SQL:

 

SELECT i_testID FROM myIndex WHERE vc_Name='erquan' AND vc_City='郑州' AND i_Age=25;

 

  首先考虑建MySQL单列索引:

  在vc_Name列上建立了索引。执行 T-SQL 时,MYSQL 很快将目标锁定在了vc_Name=erquan 的 5 条记录上,取出来放到一中间结果集。在这个结果集里,先排除掉 vc_City 不等于"郑州"的记录,再排除 i_Age 不等于 25 的记录,最后筛选出唯一的符合条件的记录。

  虽然在 vc_Name 上建立了索引,查询时MYSQL不用扫描整张表,效率有所提高,但离我们的要求还有一定的距离。同样的,在 vc_City 和 i_Age 分别建立的MySQL单列索引的效率相似。

  为了进一步榨取 MySQL 的效率,就要考虑建立组合索引。就是将 vc_Name,vc_City,i_Age 建到一个索引里:

 

ALTER TABLE myIndex ADD INDEX name_city_age (vc_Name(10),vc_City,i_Age);

 

  建表时,vc_Name 长度为 50,这里为什么用 10 呢?因为一般情况下名字的长度不会超过 10,这样会加速索引查询速度,还会减少索引文件的大小,提高 INSERT 的更新速度。

  执行 T-SQL 时,MySQL 无须扫描任何记录就到找到唯一的记录。

  肯定有人要问了,如果分别在 vc_Name,vc_City,i_Age 上建立单列索引,让该表有 3 个单列索引,查询时和上述的组合索引效率一样吗?大不一样,远远低于我们的组合索引。虽然此时有了三个索引,但 MySQL 只能用到其中的那个它认为似乎是最有效率的单列索引。

  建立这样的组合索引,其实是相当于分别建立了

 

vc_Name,vc_City,i_Age vc_Name,vc_City vc_Name

 

  这样的三个组合索引!为什么没有 vc_City,i_Age 等这样的组合索引呢?这是因为 mysql 组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,下面的几个 T-SQL 会用到:

 

SELECT * FROM myIndex WHREE vc_Name="erquan" AND vc_City="郑州"

SELECT * FROM myIndex WHREE vc_Name="erquan"

 

  而下面几个则不会用到:

SELECT * FROM myIndex WHREE i_Age=20 AND vc_City="郑州"
SELECT * FROM myIndex WHREE vc_City="郑州"

 


分享到:
评论

相关推荐

    MySql索引详解,索引可以大大提高MySql的检索速度

    索引分单列索引和组合索引。单列索引,即一个索引只包合单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。 创建索引时,你需要确保该索引是应用在SQL查询语的条件(一般作为...

    MySQL索引类型大汇总

    在 MySQL 中,索引可以分为单列索引和组合索引两种。 1. 普通索引 普通索引是最基本的索引类型,没有任何限制。可以通过以下三种方式创建普通索引: * 创建索引:`CREATE INDEX indexName ON mytable(username...

    mysql的索引优化

    1. **单列索引与多列索引**:索引可以是针对单个列的,也可以是多个列的组合。多列索引是指基于两个或多个列创建的索引,适用于查询条件中包含多个字段的情况。 2. **索引优化**:合理选择索引类型和设计索引方案...

    mysql索引介绍学习

    * 按索引列数划分:单列索引、组合索引 * 按作用划分:覆盖索引、前缀索引等 MySQL的存储模型: * 连接管理:客户端跟数据库建立连接的过程,MySQL需要负责认证、管理连接、获取权限信息。 * 查询缓存:连接上之后...

    MySQL索引分析和优化.pdf

    5. **单列索引与多列索引**:索引可以针对单个列创建(单列索引),也可以针对多个列同时创建(多列索引)。 - **单列索引**:只基于表中的一个列创建索引。 - **多列索引**:基于表中两个或更多列的组合创建索引...

    MYSQL学习笔记-索引[文].pdf

    * 单列索引和组合索引的选择取决于查询的频率和方式。 四、索引的创建和删除 * 创建索引可以使用CREATE INDEX语句、ALTER语句或CREATE TABLE语句。 * 删除索引可以使用DROP INDEX语句。 五、索引的应用场景 * 在...

    MySQL索引分析及优化.pdf

    索引可以分为单列索引和组合索引两种。单列索引即一个索引只包含单个列,而组合索引即一个索引包含多个列。 四、索引的类型 索引可以分为普通索引、唯一索引、主键索引和全文索引四种。普通索引是最基本的索引,它...

    MySQL索引分析和优化[定义].pdf

    5. **单列索引**和**多列索引**的区别在于索引覆盖的列数。单列索引只针对一列,而多列索引可以包括两列或更多列。多列索引有助于优化涉及多个列的查询,因为数据库系统可以同时考虑多个列的索引结构。例如,对于一...

    MYSQL学习笔记-索引

    接下来,通过具体的例子来比较单列索引与组合索引的区别: 假设有一个名为`myIndex`的表,包含`i_testID`、`vc_Name`、`vc_City`、`i_Age`、`i_SchoolID`等字段。现在需要执行以下查询语句: ```sql SELECT i_...

    MYSQL索引知识

    - **单列索引**:包括普通索引、唯一索引和主键索引。 - 普通索引:无特殊限制,允许重复和空值。 - 唯一索引:索引列值必须唯一,允许空值。 - 主键索引:特殊的唯一索引,不允许空值。 - **组合索引**:...

    MYSQL索引和优化详细说明教程

    单列索引针对单一列进行索引,而多列索引,如在people表中对firstname、lastname和age三列创建的fname_lname_age索引,允许更复杂的查询优化。多列索引的优势在于可以根据多个列的值进行排序和过滤,但需要注意的是...

    快速了解MySQL 索引

    索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索包含多个列。 创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 ...

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

    MySQL中的组合索引和最左匹配原则是数据库优化的关键概念,尤其在处理大量数据时,它们可以帮助提升查询性能。本文将深入探讨这两个概念,并通过示例进行解释。 **组合索引**是在多列上创建的单个索引,而不是单独...

    索引介绍聚集索引和非聚集索引

    ### 索引介绍:聚集索引与非聚集索引 #### 一、索引的基本概念 在数据库中,索引是一种特殊的文件结构,它的主要目的是为了提高数据检索的速度。索引通过创建一种数据结构(例如B树)来实现这一点,这种结构允许...

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

    1. **选择适当的索引类型**:根据应用的特点和需求选择合适的索引类型,如单列索引、组合索引、全文索引等。 2. **避免过度索引**:过多的索引会增加写入操作的成本,合理规划索引数量和类型。 3. **使用覆盖索引**...

    MYSQL学习笔记-索引参照.pdf

    总之,理解并熟练运用MySQL中的各种索引类型,以及何时创建单列索引和组合索引,对于提升数据库的查询效率至关重要。在实际应用中,应根据业务需求和查询模式进行合理设计,平衡查询速度和存储开销。

    Mysql之索引介绍

    【MySQL之索引介绍】 MySQL中的索引是一种特殊的数据结构,它的主要目的是为了加快数据的检索速度。在没有索引的情况下,数据库系统需要从第一条记录开始逐行扫描,直到找到匹配的行,这个过程在大数据量下会非常...

Global site tag (gtag.js) - Google Analytics