`
michaellou
  • 浏览: 56385 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

mysql组合索引的顺序问题

阅读更多

  

【转自: http://blog.phpbean.com/a.cn/33/ 】

一张表建一个组合索引UNIQUE KEY `user_key` (`login_name`,`password`,`age`)

索引的存储顺序是按照建表时定义的顺序即login_name-》password-》age

下图是索引的存储结构



一 全键匹配


select * from table where login_name=? and password=? and age=? ;

等同

select * from table where password=?  and age=? and login_name=? ;
因为mysql会给你优化sql的顺序



二 匹配最左前缀
   
select * from table where login_name=?;只用到索引的第一列
select * from table where login_name=? and password=? 用到索引的前两个列
select * from table where login_name=?  and age=? ;只用到索引的第一列 因为跳过索引中password列了

以下语句不适用该索引

select * from table where password=?  ;
select * from table where  password=? and age=? ;
select * from table where age=? ;

三 匹配范围

select * from table where login_name like'?%'; 用到索引的第一列
select * from table where login_name=? and password like'?%' and age=? ; 用到索引的前两个列 因为引擎不能优化第一个范围条件的右边列

 

分享到:
评论

相关推荐

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

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

    Mysql之组合索引方法详解

    组合索引的顺序非常重要,因为MySQL只能对索引中最左边列的前缀进行有效的查找,这种特性被称为“最左前缀原则”。这意味着如果有一个组合索引(c1, c2),那么查询语句`SELECT * FROM t1 WHERE c1=1 AND c2=2`和`...

    mysql之Linux安装,重点是索引的优化笔记

    - **复合索引**:基于多个字段组合创建的索引。 - **索引失效案例**: - 使用`OR`操作符连接条件时。 - 使用函数或表达式计算字段值时。 - 条件中包含`LIKE`操作且模式开头包含通配符时。 **5. 常见索引选择**...

    MySQL联合索引功能与用法实例分析

    通过明智地选择索引列的顺序和数量,可以显著提高MySQL数据库的查询效率。同时,定期评估和调整索引策略以适应应用程序的变化,也是数据库维护的重要部分。了解这些基本的索引原则,将有助于你在MySQL数据库管理中...

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

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

    MySQL联合索引用法示例

    如果查询条件通常先指定`deptid`,则可能需要调整索引顺序。 此外,虽然联合索引可以提高复合条件的查询速度,但并不是所有涉及这些列的查询都能受益。如果查询只包含联合索引中的一个列,那么数据库可能只能使用该...

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

    多列索引的优势在于可以根据多个列的值进行排序和过滤,但需要注意的是,查询顺序与索引列的顺序有关,不按索引顺序的部分列查询可能无法有效利用索引。 优化索引的关键在于平衡查询性能和存储空间。过多的索引会...

    mysql索引与树结构(索引简介、索引用法详解、B-Tree索引结构、索引导致的问题).docx

    - **创建组合索引**: `CREATE INDEX index_name ON table_name(column1, column2);` - **删除索引**: `DROP INDEX index_name ON table_name;` - **修改索引**: MySQL不直接支持修改索引,需先删除再重建。 - **...

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

    组合索引的顺序很重要,因为它是按顺序进行查找的。如果经常有查询涉及`vc_Name`、`vc_City`和`i_Age`这三个列,那么这个顺序就是最佳的。但如果大部分查询只涉及到`vc_Name`,则单独的`vc_Name`索引可能更有优势,...

    MySQL索引及其原理1

    - **组合索引**:在多个列上创建索引,按照列的顺序进行查找。 - **全文索引**:用于全文搜索,可以搜索文本中的关键词。 3. **索引的目标和数据结构** 索引的主要目标是提高查询效率。B+树是一种广泛用于数据库...

    mysql索引(一篇就够).pdf

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

    mysql索引笔记1

    4. 高并发场景下,创建组合索引可提高效率。 5. 排序和分组字段。 6. 统计字段。 反之,以下情况通常不需要创建索引: 1. 记录数量很少的表。 2. 经常进行大量增删改操作的表。 3. 数据重复且分布均匀的字段。 4. ...

    为mysql数据库建立索引.docx

    组合索引是指在多个字段上建立的索引,并且字段的顺序是重要的。例如,在category_id、user_id和adddate字段上建立一个索引,可以使用以下语句: `CREATE INDEX mytable_categoryid_userid_adddate ON mytable ...

    Mysql索引汇总[参考].pdf

    在创建组合索引时,应根据查询条件的频繁度和数据分布情况来选择合适的列顺序,通常将最常用于筛选的列放在最前面。 值得注意的是,虽然索引可以加快查询速度,但也会占用额外的存储空间,并且在插入、更新和删除...

    MYSQL索引优化.docx

    例如,如果有一个组合索引(it1c1c2)基于(c1,c2),查询语句如`WHERE c1=1 AND c2=2`或`WHERE c1=1`可以利用这个索引,但`WHERE c2=2`则无法使用,因为它缺少引导列c1。 索引的类型根据存储引擎的不同而不同。B-Tree...

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

    这里涉及到了“最左前缀原则”,即在使用组合索引时,查询条件必须与索引定义的字段顺序一致,并且至少包含索引的第一个字段。例如,上述索引支持如下查询: ```sql SELECT * FROM ds_order WHERE create_time = '...

    MySQL索引分析.pdf

    在MySQL中,索引是提升数据库查询效率的关键工具。本文将深入探讨MySQL索引的类型、用途及其优化策略。 首先,索引可以分为几种基本类型。普通索引是最基础的索引形式,没有任何限制,允许在查询时快速定位到特定...

Global site tag (gtag.js) - Google Analytics