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
您可能感兴趣
- windows 安装解压版 mysql5.7.28 winx64的详细教程(windows 安装解压版 mysql5.7.28 winx64的详细教程)
- mysql事务特性和隔离级别(Mysql事务特性和级别原理解析)
- 宝塔数据库不小心删了(宝塔面板MySQL数据库经常自动停止的解决方法)
- mysql 日期和时间处理函数(MySQL日期与时间函数的使用汇总)
- mysql和navicat怎么用(如何用Navicat操作MySQL)
- key的用法归纳mysql(详解mysql中explain的type)
- mysql 5.5.27 winx64安装配置方法图文教程(mysql 5.5.27 winx64安装配置方法图文教程)
- mysqlset用法(mysql descDESCRIBE命令实例讲解)
- mysql内部有4种常见日志(MySQL 慢日志相关知识总结)
- navicatformysql使用视图(Navicat for MySQL的使用教程详解)
- mysql多行数据之和(详解MySQL的数据行和行溢出机制)
- mysql时间存储如何选择(MySQL如何使用时间作为判断条件)
- centos7可以装mysql吗(详解腾讯云CentOS7.0使用yum安装mysql及使用遇到的问题)
- centos7怎么安装mysql(Centos7 mysql数据库安装及配置实现教程)
- mysql存储引擎的创建与修改(关于MySQL Memory存储引擎的相关知识)
- 如何看idea连接mysql数据库(IDEA 链接Mysql数据库并执行查询操作的完整代码)
- 蒜苔炒鱿鱼(蒜苔炒鱿鱼)
- 远离 五毛食品 洛阳80后妈妈发明的 飞行棋 成校园爆款 玩具(远离五毛食品)
- 失传的古代飞行棋游戏 六博(失传的古代飞行棋游戏)
- 感冒要吃什么药(猫咪感冒要吃什么药)
- 下雪会怎样(下雪怎样画)
- 白蓝色穿搭(白蓝色衣服配什么裤子)
热门推荐
- mysql中delete聚合函数查询值(MySQL 分组查询和聚合函数)
- next js上线(Next.js入门使用教程)
- php队列的用法实例(PHP实现一个限制实例化次数的类示例)
- 什么是mime编码(Mime类型与文件后缀对照表)
- 如何在vscode中运行linux(解决VScode配置远程调试Linux程序的问题)
- nginx https 域名配置(阿里云Nginx配置https实现域名访问项目图文教程)
- docker容器关闭后怎么启动(docker批量启动关闭所有容器的操作)
- python虚拟变量教程(Python中psutil的介绍与用法)
- VPS/云服务器使用3389端口远程连接管理图文教程(Windows)(VPS/云服务器使用3389端口远程连接管理图文教程Windows)
- vue-websocket 组件教程(Vue+express+Socket实现聊天功能)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9