mysql怎样建立索引(MySQL创建索引需要了解的)
类别:数据库 浏览量:1830
时间:2021-10-11 00:52:23 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创建索引的资料请关注开心学习网其它相关文章!
原文链接:https://mp.weixin.qq.com/s/FrLuBDbhfrGSzcrUwIq5SA
您可能感兴趣
- mysql使用步骤(聊一聊MySQL角色Role功能)
- MySQL中NULL和空值的区别
- mysqltext与varchar区别(MySQL CHAR和VARCHAR该如何选择)
- mysql分页查询有几种(MySQL 查询的排序、分页相关)
- mysql创建用户并给用户授权(MySQL 主从复制中创建复制用户的时机探讨)
- mysql8.0.21的安装步骤(mysql8.0.23 msi安装超详细教程)
- mysql数据库丢失怎么办(MySQL 数据丢失排查案例)
- 怎么查看mysql异常链接(MySQL 查看链接及杀掉异常链接的方法)
- dockermysql实例(docker 连接宿主Mysql操作)
- mysql索引失效的几种情况(MySql范围查找时索引不生效问题的原因分析)
- mysql数据字段默认值怎么设置(MySQL 字段默认值该如何设置)
- 查询按照部门分组的mysql语句(Mysql根据某层部门ID查询所有下级多层子部门的示例)
- mysql高可用集群(MySQL之高可用集群部署及故障切换实现)
- mysql查看死锁记录(mysql查看死锁与去除死锁示例详解)
- mysql数据类型图解(MySQL数据库主从技术GTID大揭秘)
- 2021-10-04 01:06:07
- 菲律宾潜水(菲律宾潜水价格)
- 泰国人妖(变性手术生殖器要割掉吗)
- 泰国美女(泰国人妖和女性如何区分)
- 泰国旅游业怎么样(泰国的旅游产业)
- 越南新娘(越南新娘婚介网站)
- 越南新娘(越南新娘骗婚套路流程)
热门推荐
- videojs播放流媒体(video.js支持m3u8格式直播的实现示例)
- mysql重复插入数据教程(Mysql避免重复插入数据的4种方式)
- php内置加密函数(php过滤htmlspecialchars 函数实现把预定义的字符转换为 HTML 实体用法分析)
- SQL group by分组查询
- 如何通过广域网访问ftp服务器(Serv-u 外网访问内网的FTP服务器实现方法)
- 云服务器9兆带宽的上传速度是多少(云服务器网速多少怎么计算?云服务器的1兆带宽是多少的?)
- laravel怎样封装增删改查(laravel框架上传图片实现实时预览功能)
- dedecms标签怎么调用(dedecms首页调用随机文章及自动更新功能实例)
- python微信红包代码(php生成微信红包数组的方法)
- sqlserver安装使用教程(SQL Server 2019下载与安装教程自定义安装)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9