我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL创建索引需要了解的

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL创建索引需要了解的

前言: 

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

1.创建索引方法

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


# 建表时指定索引
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 权限就行了呢?下面我们来具体看下。


# 测试用户的权限
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创建索引的资料请关注自学编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL创建索引需要了解的

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL创建索引需要了解的

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

mysql创建索引需要注意什么

这篇文章主要介绍“mysql创建索引需要注意什么”,在日常操作中,相信很多人在mysql创建索引需要注意什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql创建索引需要注意什么”的疑惑有所帮助!接下来
2023-06-20

了解MySQL前缀索引的重要性

了解MySQL前缀索引的重要性,需要具体代码示例在数据库系统中,索引是一种提高数据检索效率的重要工具。MySQL作为一个强大的关系型数据库管理系统,索引在其中起着至关重要的作用。在MySQL中,除了普通的索引外,还有前缀索引这一特殊的索引
了解MySQL前缀索引的重要性
2024-03-14

mysql创建联合索引要注意哪些事项

创建联合索引时,需要注意以下事项:联合索引包含多个字段,字段的顺序会影响查询性能。一般来说,将最经常用于查询的字段放在索引的前面,可以提高查询效率。联合索引的字段顺序要符合查询的字段顺序,否则索引无法被有效利用。联合索引的字段数目要适量,过
mysql创建联合索引要注意哪些事项
2024-04-09

MySQL 索引的优缺点以及创建索引的准则

一、为什么要创建索引呢(优点) 这是因为,创建索引可以大大提高系统的性能。第一, 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。第二, 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。第三, 可以加速表和表之间的连接,
2022-05-31

mysql创建索引的方式有哪些

在MySQL中,有以下几种方式可以创建索引:1. CREATE INDEX语句:可以使用CREATE INDEX语句来创建索引。语法如下:```CREATE INDEX index_name ON table_name (column_na
2023-09-26

mysql创建索引的原则有哪些

创建索引的原则有以下几点:1. 选择合适的列:选择作为索引的列应该是经常用于查询和连接的列,而不是很少使用的列。2. 索引的选择性:选择具有高选择性的列作为索引,即该列的值能够唯一或几乎唯一地标识每一行数据。3. 索引的大小:创建索引会占用
2023-09-21

MySQL创建聚簇索引失败怎么解决

在MySQL中,创建聚簇索引失败可能是由于多种原因导致的,比如表中数据量过大、硬件资源不足、索引字段重复等。下面是一些可能的解决方法:检查表结构和索引字段:确保表结构和索引字段的设置正确,避免重复或错误的字段设置。优化表数据:如果表中数据量
MySQL创建聚簇索引失败怎么解决
2024-04-24

编程热搜

目录