新闻动态
新闻动态
NEWS INFORMATION

MySQL创建索引需要了解的

发布日期:2022-02-14 12:09 | 文章来源:站长之家

在 MySQL 中,基本上每个表都会有索引,有时候也需要根据不同的业务场景添加不同的索引。索引的建立对于数据库高效运行是很重要的,本篇文章将介绍下创建索引相关知识及注意事项。

1.创建索引方法

创建索引可以在建表时指定,也可以建表后使用 alter table 或 create index 语句创建索引。下面展示下几种常见的创建索引场景。

#建表时指定索引
CREATETABLE`t_index`(
`increment_id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'自增主键',
`col1`int(11)NOTNULL,
`col2`varchar(20)NOTNULL,
`col3`varchar(50)NOTNULL,
`col4`int(11)NOTNULL,
`col5`varchar(50)NOTNULL,
PRIMARYKEY(`increment_id`),
UNIQUEKEY`uk_col1`(`col1`),
KEY`idx_col2`(`col2`)
)ENGINE=InnoDBDEFAULTCHARSET=utf8COMMENT='测试索引';
#创建索引(两种方法)
#普通索引
altertable`t_index`addindexidx_col3(col3);
createindexidx_col3ont_index(col3);
#唯一索引
altertable`t_index`adduniqueindexuk_col4(col4);
createuniqueindexuk_col4ont_index(col4);
#联合索引
altertable`t_index`addindexidx_col3_col4(col3,col4);
createindexidx_col3_col4ont_index(col3,col4);
#前缀索引
altertable`t_index`addindexidx_col5(col5(20));
createindexidx_col5ont_index(col5(20));
#查看表索引
mysql>showindexfromt_index;
+---------+------------+----------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
|Table|Non_unique|Key_name|Seq_in_index|Column_name|Collation|Cardinality|Sub_part|Packed|Null|Index_type|Comment|Index_comment|
+---------+------------+----------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
|t_index|0|PRIMARY|1|increment_id|A|0|NULL|NULL||BTREE|||
|t_index|0|uk_col1|1|col1|A|0|NULL|NULL||BTREE|||
|t_index|1|idx_col2|1|col2|A|0|NULL|NULL||BTREE|||
|t_index|1|idx_col3|1|col3|A|0|NULL|NULL||BTREE|||
+---------+------------+----------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

2.创建索引所需权限

如果你用的不是 root 账号,那创建索引就要考虑权限问题了,是不是需要 create、alter 权限就行了呢?下面我们来具体看下。

#测试用户的权限
mysql>showgrants;
+-------------------------------------------------------------------------------------+
|Grantsfortestuser@%|
+-------------------------------------------------------------------------------------+
|GRANTUSAGEON*.*TO'testuser'@'%'|
|GRANTSELECT,INSERT,UPDATE,DELETE,CREATE,ALTERON`testdb`.*TO'testuser'@'%'|
+-------------------------------------------------------------------------------------+
#altertable方式创建索引
mysql>altertable`t_index`addindexidx_col2(col2);
QueryOK,0rowsaffected(0.05sec)
Records:0Duplicates:0Warnings:0
#createindex方式创建索引
mysql>createindexidx_col3ont_index(col3);
ERROR1142(42000):INDEXcommanddeniedtouser'testuser'@'localhost'fortable't_index'
#createindex方式创建索引还需要index权限赋予index权限后再执行
mysql>createindexidx_col3ont_index(col3);
QueryOK,0rowsaffected(0.04sec)
Records:0Duplicates:0Warnings:0

从上面测试可以看出,使用 alter table 方式创建索引需要 alter 权限,使用 create index 方式创建索引需要 index 权限。

另外说明下,删除索引也是可以使用 alter table `tb_name` drop index xxx 和 drop index xxx on tb_name 两种方式,分别需要 alter 和 index 权限。

索引的优点显而易见是可以加速查询,但创建索引也是有代价的。首先每建立一个索引都要为它建立一棵B+树,会占用额外的存储空间;其次当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。所以我们创建索引时还是需要根据业务来考虑的,一个表中建议不要加过多索引。

以上就是MySQL创建索引需要了解的的详细内容,更多关于MySQL创建索引的资料请关注本站其它相关文章!

国外服务器租用

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部