mysql 联合索引详解
联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。
两个或更多个列上的索引被称作复合索引。
利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引 不同于使用两个单独的索引。复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知 道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。
所以说创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处。
如:建立 姓名、年龄、性别的复合索引。
create table test(
a int,
b int,
c int,
KEY a(a,b,c)
);
优: select * from test where a=10 and b>50
差: select * from test where a50
优: select * from test order by a
差: select * from test order by b
差: select * from test order by c
优: select * from test where a=10 order by a
优: select * from test where a=10 order by b
差: select * from test where a=10 order by c
优: select * from test where a>10 order by a
差: select * from test where a>10 order by b
差: select * from test where a>10 order by c
优: select * from test where a=10 and b=10 order by a
优: select * from test where a=10 and b=10 order by b
优: select * from test where a=10 and b=10 order by c
优: select * from test where a=10 and b=10 order by a
优: select * from test where a=10 and b>10 order by b
差: select * from test where a=10 and b>10 order by c
索引原则
1.索引越少越好
原因:主要在修改数据时,第个索引都要进行更新,降低写速度。
2.最窄的字段放在键的左边
3.避免file sort排序,临时表和表扫描
转自:http://blog.csdn.net/lmh12506/article/details/8879916
相关推荐
1. 单列索引 在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有两种类型的列:在Where子句中出现的列,在join子句中出现的列。请看下面这个查询: Select age ## 不使用索引 ...
假设我们需要频繁查询`firstname`和`lastname`字段,那么可以考虑在这两个字段上创建一个联合索引: ```sql ALTER TABLE people ADD INDEX idx_firstname_lastname (firstname, lastname); ``` 这样,当执行类似于...
在有1000万条记录的表中,如果有查询`SELECT * FROM table WHERE col1=1 AND col2=2 AND col3=3`,如果每个条件能过滤掉90%的数据,联合索引(col1,col2,col3)可以一次过滤掉99%的数据,而单列索引则需要多次回表操作...
MySQL 索引包括普通索引、惟一性索引、全文索引、单列索引、多列索引和空间索引。 #### 普通索引 创建普通索引时,不附加任何限制条件。可以创建在任何数据类型上,其值是否唯一和非空由字段自身的完整性约束条件...
例如,我们可以对age和name列建立联合索引,然后查询age为14并且name为NULL的行,也可以使用索引。 NULL的特殊性 虽然MySQL可以在含有NULL的列上使用索引,但是NULL和其他数据在索引中的处理方式不同。NULL是一个...
MySQL 中的索引可以分为普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等几种类型。 索引的设计原则包括: 1. 选择唯一性索引; 2. 为经常需要排序、分组和联合操作的字段建立索引; 3. 为常作为...
如果查询中的`OR`条件涉及到单列索引,MySQL可能无法有效地使用这些索引。例如,如果你有两个独立的索引分别在`column1`和`column2`上,查询`WHERE column1 = 'value1' OR column2 = 'value2'`可能不会同时使用这两...
最后,根据列的数量,索引可以分为单列索引和多列索引(复合索引/联合索引)。复合索引是针对多个列创建的索引,适用于同时需要过滤多列的查询。 综上所述,理解MySQL索引的不同分类和相关概念对于优化查询性能至关...
MySQL 索引的分类包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引。索引设计的原则包括:选择唯一性索引;为经常需要排序、分组和联合操作的字段建立索引;为常作为查询条件的字段建立索引;限制...
MySQL中的组合索引和最左匹配原则是数据库优化的关键概念,尤其在处理大量数据时,它们可以帮助提升查询性能。本文将深入探讨这两个概念,并通过示例进行解释。 **组合索引**是在多列上创建的单个索引,而不是单独...
而对于多列查询,尤其是涉及到联合索引的情况,非聚集索引可能更优。 - **更新性能**:由于聚集索引会影响数据行的物理顺序,因此在插入、删除或更新操作时可能会引起更多的页面分裂或重组,而非聚集索引则相对较少...
但在本地试了下,null列是可以用到索引的,不管是单列索引还是联合索引,但仅限于is null,is not null是不走索引的。 后来在官方文档中找到了说明,如果某列字段中包含null,确实是可以使用索引的,地址:...
MySQL 的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。从功能逻辑上说,索引主要有四种,分别是普通索引、唯一索引、主键索引和全文索引。按照物理实现方式,索引可以分为两种:聚簇...
针对这些查询,我们进行了不同的索引配置测试,包括无索引、单索引和组合索引的情况。测试结果显示,对于查询性能而言,最优化的选择是分别针对user_uuid和dept_uuid创建单列索引idx_user和idx_dept。 - idx_user ...
索引的类型涵盖广泛,包括主键索引(不允许重复,且唯一标识一行)、普通索引(无唯一性要求)、唯一索引(不允许重复但允许NULL)、单列索引和联合索引、聚簇索引(数据行和索引存储在一起)和非聚簇索引(索引和...
最后,我们将学习各种类型的索引,包括主键索引、普通索引、唯一索引、单列索引与联合索引、聚簇索引与非聚簇索引,以及覆盖索引。不同类型的索引有各自的特性和用途,正确选择和使用这些索引类型能够最大化地提升...
MySQL 索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引。不同的索引类型有其特点和应用场景,选择合适的索引类型可以提高查询效率。 索引的设计原则 1. 选择唯一性索引; 2. 为经常需要...