MySQL创建索引需要了解的

吾爱主题 阅读:213 2024-04-02 08:01:23 评论:0

 

前言: 

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

 

1.创建索引方法

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

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 # 建表时指定索引 CREATE  TABLE  `t_index` (    `increment_id`  int (11)  NOT  NULL  AUTO_INCREMENT COMMENT  '自增主键' ,    `col1`  int (11)  NOT  NULL ,    `col2`  varchar (20)  NOT  NULL ,    `col3`  varchar (50)  NOT  NULL ,    `col4`  int (11)  NOT  NULL ,   `col5`  varchar (50)  NOT  NULL ,    PRIMARY  KEY  (`increment_id`),    UNIQUE  KEY  `uk_col1` (`col1`),    KEY  `idx_col2` (`col2`) ) ENGINE=InnoDB   DEFAULT  CHARSET=utf8 COMMENT= '测试索引' ;   # 创建索引(两种方法) # 普通索引 alter  table  `t_index`  add  index  idx_col3 (col3);  create  index  idx_col3  on  t_index(col3); # 唯一索引 alter  table  `t_index`  add  unique  index  uk_col4 (col4); create  unique  index  uk_col4  on  t_index(col4); # 联合索引 alter  table  `t_index`  add  index  idx_col3_col4 (col3,col4); create  index  idx_col3_col4  on  t_index(col3,col4); # 前缀索引 alter  table  `t_index`  add  index  idx_col5 (col5(20));  create  index  idx_col5  on  t_index(col5(20));   # 查看表索引 mysql> show  index  from  t_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 权限就行了呢?下面我们来具体看下。

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # 测试用户的权限 mysql> show grants; +-------------------------------------------------------------------------------------+ | Grants  for  testuser@%                                                               | +-------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO  'testuser' @ '%'                                                 | | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER ON `testdb`.* TO  'testuser' @ '%'  | +-------------------------------------------------------------------------------------+   # alter table 方式创建索引 mysql> alter table `t_index` add index idx_col2 (col2); Query OK, 0 rows affected (0.05 sec) Records: 0  Duplicates: 0  Warnings: 0   # create index 方式创建索引 mysql>  create index idx_col3 on t_index(col3); ERROR 1142 (42000): INDEX  command  denied to user  'testuser' @ 'localhost'  for  table  't_index'   # create index 方式创建索引还需要index权限 赋予index权限后再执行 mysql> create index idx_col3 on t_index(col3); Query OK, 0 rows affected (0.04 sec) Records: 0  Duplicates: 0  Warnings: 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创建索引的资料请关注服务器之家其它相关文章!

原文链接:https://mp.weixin.qq.com/s/FrLuBDbhfrGSzcrUwIq5SA

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容