MySQL联合索引

联合索引,也称复合索引,是覆盖多列的索引。创建方式包括在`ALTER TABLE`语句中或使用`CREATE INDEX`语句。遵循最左原则,如INDEX `(name, age)`支持`name`或`name, age`组合查询。不支持单独的`age`查询。创建复合索引可提高查询效率,特别是当最常作为限制条件的列放在最左边时。注意,任何一列包含NULL值,整个复合索引都会失效。" 7868836,1274664,图论应用:拓扑排序详解与实例分析,"['图论算法', '数据结构', '图遍历']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

联合索引概念:

联合索引又叫复合索引,即一个覆盖表中两列或者以上的索引,例如:

index_name(column a,column b)

创建方式
执行alter table语句时创建
alter table table_name add index index_name(column_list)

index_name是创建的联合索引的名字,可以没有,没有的话系统会根据该索引包含的第一列来赋名称;table_name是要创建该索引的表名;column_list为该索引所包含的表的字段名。

执行create index语句时创建
create index index_name on table_name(column_list)

此种情况是在表已经创建好的情况下,再来创建复合索引。index_name和column_list同上;table_name是要创建索引的表名。

例子

create table stu
(
id int,
name varchar(10),
age int,
primary key(id)
);
ALTER TABLE stu ADD INDEX LianHeIndex (name,age);
或者
create index LianHeIndex on stu(name,age);

执行上面的语句后在表stu中就创建好了一个名叫LianHeIndex联合索引,在使用联合索引的时候,我们遵守一个最左原则,即INDEX LianHeIndex (name,age)支持name|name age组合查询,而不支持age查询;换句话说,在执行

select * from stu where name=?

或者

select * from stu where name=? and age=?

时联合索引才会有效,如果执行

select * from stu where age=?

则联合索引不会生效。

如果我们是在name和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在name、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(name, age)的复合索引,那么其实相当于创建了(name)、(name,age)两个索引,这被称为最佳左前缀特性。

因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。

注意事项
只要列中包含有NULL值都将不会被包含在索引中
复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的,所以我们在数据库设计时尽可能不要让字段的默认值为NULL。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值