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 中的锁结构)
- mysql意外查不到数据(MySQL 丢失数据的原因及解决)
- mysql的json格式解析(mysql json格式数据查询操作)
- mysql中delete聚合函数查询值(MySQL 分组查询和聚合函数)
- mysql8.0.16安装步骤图解(mysql 8.0.22 安装配置图文教程)
- mysql字符集怎么看(mysql字符集相关总结)
- mysql千万级别数据查询优化(mysql千万级数据量根据索引优化查询速度的实现)
- mysql的常见优化(详解GaussDB for MySQL性能优化)
- mysql数据库死锁原理(MySQL数据库锁机制原理解析)
- mysql将字符串转换成整数(MYSQL字符串强转的方法示例)
- mysql中自增字段类型(MySQL数字类型自增的坑)
- mysql怎么迁移数据(如何把本地mysql迁移到服务器数据库)
- mysql的简单介绍(MySQL Shell的介绍以及安装)
- win10安装mysql8.0如何启动(win10下mysql 8.0.23 安装配置方法图文教程)
- navicat配置远程访问mysql(解决Navicat无法连接 VMware中Centos系统中的 MySQL服务器的问题)
- mysql的存储性能优化(MySQL的查询缓存和Buffer Pool)
- 世界上只有妈妈好(世界上只有妈妈好的歌词)
- 为什么现在社会越来越卷了(现在社会为什么发展那么快呢)
- 直播带货能赚到很多钱吗(直播带货能赚到很多钱吗现在)
- 做网红真的很能赚钱吗(做网红真的很能赚钱吗)
- 10句英语常用(英语常用900句)
- 爱情能当饭吃吗(爱情能当饭吃吗说说)
热门推荐
- sql server中实现split功能
- unix进程空间的区段(Unix/Linux fork隐藏的开销)
- python turtle简易绘图(详解Python使用Plotly绘图工具,绘制甘特图)
- 如何安全实现“记住我”的功能
- iis上搭建php环境(vultr服务器windows server 2012 r2搭建IIS8+PHP+MYSQL+phpMyAdmin运行环境图文教程)
- linux中ceph的状态(Wdcp linux控制面板配置多PHP版本记录)
- dedecms制作的网站如何发布(DedeCms后台添加编辑文章空白的解决方法)
- docker虚拟化容器使用教程(Docker安装ClickHouse并初始化数据测试)
- vue如何获取元素(vue第一次获取不到元素的解决方法记录)
- phplaravel怎么优化(laravel执行php artisan migrate报错的解决方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9