MySQL创建索引

1. 索引分类

1.1 普通索引

  • 加快对数据的访问速度,一般在查询条件WHERE column=或排序条件ORDER BY column中的数据列创建索引。

命令:

ALTER TABLE `table_name` ADD INDEX index_name ( `column` );

1.2 唯一索引(UNIQUE)

  • 创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复;
  • 唯一索引和普通索引使用的结构都是B-tree,执行时间复杂度都是O(log n)
  • sql server中,唯一索引字段不能出现多个null值,在mysqlInnodb 引擎中,是允许在唯一索引的字段中出现多个null值的。

命令:

ALTER TABLE `table_name` ADD UNIQUE ( `column` );
或
ALTER TABLE 'table_name' ADD UNIQUE INDEX index_name ( `column` );

1.3 主键索引(PRIMARY)

  • 不允许重复,不允许空值。

命令:

ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` );
或
ALTER TABLE 'table_name' ADD PRIMARY KEY pk_index_name ( `column` );

1.4 全文索引(FULLTEXT)

命令:

ALTER TABLE `table_name` ADD FULLTEXT ( `column`);
或
ALTER TABLE 'table_name' ADD FULLTEXT INDEX ft_index_name ( `column`);

1.5 组合索引 /多列索引 /复合索引 /联合索引

  • 遵循“最左前缀”原则,把最常用作为检索或排序的列放在最左,依次递减,组合索引相当于建立了column1column1column2column1column2column3 三个索引,而column2或者column3是不能使用索引的。

命令:

ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` );

<!-- 组合索引可能因为列名长度过长而导致索引的`key`太大,导致效率降低,在允许的情况下,可以只取`column1`和`column2`的前几个字符作为索引。-->
<!-- 例:表示使用`column1`的前4个字符和`column2`的前3个字符作为索引 -->
ALTER TABLE 'table_name' ADD INDEX index_name ( column1(4), column2(3) );

2 查询-解释(EXPLAIN)

EXPLAIN SELECT命令,给SELECT命令加一个EXPLAIN关键字作为前缀。

列名称含义解释
table数据表名称按被读取的先后顺序排列
type本数据表与其它数据表之间的关联关系(JOIN)效率从高到低排序,system > const > eq_ref > ref > range > index > All
possible_keys可选用的各个索引本次查询中可选用的各个索引
key实际选用的索引本次查询中实际选用的索引
key_len索引长度按字节计算的索引长度(INTEGER 对应字节长度 4,复合索引可以看到查询的具体使用部分),一般key_len数据列里的值越小越好(意思是更快)
ref关联数据表里的数据列关联关系中另一个数据表里的数据列的名字
row预计读取数据行个数本次查询预计读取此数据表中的数据行的个数(row数据列里的所有数字的乘积可以让我们大致了解这个查询需要处理多少组合)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值