MySQL索引的基本语法

定义主键约束、外键约束、唯一约束等约束时,相当于同时在指定列上创建了一个索引

创建表时

create table table_name(
		[col_name data_type] [unique | fulltext | spatial...],
		[unique ...][index | key][index_name] (col_name [length], ...)
);
create table user (
		id int not null,
		name char(30) not null,
		unique index uniqueIdx(id)
	);

表已经存在时

第一种

alter table table_name
		add [unique ...][index | key][index_name](col_name [length], ...);

alter table user add unique index uniqueIdx(id);

第二种

删除索引

查看MySQL中的索引

索引的生效

  • 只要创建了索引,就一定会生效吗?

不一定,当使用组合索引时,如果没有遵循最左匹配原则,索引不生效。

例如,创建id,name,age 组合索引时:

  • id(id, name)(id, name, age) 查询,索引生效

  • age(age, name) 查询,索引不生效

  • 这样判断索引是否生效

    使用explain 关键字。

  • possible_keys :MySQL在搜索记录时可选用的各个索引

  • key :MySQL实际选用的索引

怎么避免索引失效?

  • 使用组合索引时,遵循最左匹配原则

  • 不在索引列上进行任何操作,比如:计算、函数、类型转换

  • 尽量使用覆盖索引索引列,尽量不使用不等于条件!= / <>、通配符开头的模糊查询(like %abc)、or作为连接条件

  • 字符串加单引号(不加可能会发生索引列的隐式转换,导致索引失败)

Last updated