前言:

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

1.创建索引方法

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

#建表时指定索引CREATETABLE`t_index`(`increment_id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'自增主键',`col1`int(11)NOTNULL,`col2`varchar(20)NOTNULL,`col3`varchar(50)NOTNULL,`col4`int(11)NOTNULL,`col5`varchar(50)NOTNULL,PRIMARYKEY(`increment_id`),UNIQUEKEY`uk_col1`(`col1`),KEY`idx_col2`(`col2`))ENGINE=InnoDBDEFAULTCHARSET=utf8COMMENT='测试索引';#创建索引(两种方法)#普通索引altertable`t_index`addindexidx_col3(col3);createindexidx_col3ont_index(col3);#唯一索引altertable`t_index`adduniqueindexuk_col4(col4);createuniqueindexuk_col4ont_index(col4);#联合索引altertable`t_index`addindexidx_col3_col4(col3,col4);createindexidx_col3_col4ont_index(col3,col4);#前缀索引altertable`t_index`addindexidx_col5(col5(20));createindexidx_col5ont_index(col5(20));#查看表索引mysql>showindexfromt_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|||+---------+------------+----------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
#测试用户的权限mysql>showgrants;+-------------------------------------------------------------------------------------+|Grantsfortestuser@%|+-------------------------------------------------------------------------------------+|GRANTUSAGEON*.*TO'testuser'@'%'||GRANTSELECT,INSERT,UPDATE,DELETE,CREATE,ALTERON`testdb`.*TO'testuser'@'%'|+-------------------------------------------------------------------------------------+#altertable方式创建索引mysql>altertable`t_index`addindexidx_col2(col2);QueryOK,0rowsaffected(0.05sec)Records:0Duplicates:0Warnings:0#createindex方式创建索引mysql>createindexidx_col3ont_index(col3);ERROR1142(42000):INDEXcommanddeniedtouser'testuser'@'localhost'fortable't_index'#createindex方式创建索引还需要index权限赋予index权限后再执行mysql>createindexidx_col3ont_index(col3);QueryOK,0rowsaffected(0.04sec)Records:0Duplicates:0Warnings:0

另外说明下,删除索引也是可以使用 alter table `tb_name` drop index xxx 和 drop index xxx on tb_name 两种方式,分别需要 alter 和 index 权限。

索引的优点显而易见是可以加速查询,但创建索引也是有代价的。首先每建立一个索引都要为它建立一棵B+树,会占用额外的存储空间;其次当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。所以我们创建索引时还是需要根据业务来考虑的,一个表中建议不要加过多索引。

更多相关文章

  1. MySQL系列多表连接查询92及99语法示例详解教程
  2. Linux下MYSQL 5.7 找回root密码的问题(亲测可用)
  3. MySQL 什么时候使用INNER JOIN 或 LEFT JOIN
  4. [android源码下载索引贴】微信+二维码那都不是事......
  5. android从服务器下载文件(php+apache+win7+MySql)
  6. 【有图】android通过jdbc连接mysql(附文件)
  7. android触控,先了解MotionEvent
  8. 系出名门 Android(安卓)系列文章索引
  9. 系出名门 Android(安卓)系列文章索引

随机推荐

  1. android 多击事件的实现方法
  2. android 读取串口数据的服务,android串口
  3. 关于android旋屏问题
  4. 【Android 系统开发】 Android 系统启动
  5. Fragment详解
  6. [转]Android 图形系统剖析
  7. Android多语言适配values文件夹命名
  8. 使用NetBeans+Android SDK+NBAndroid插件
  9. Android数据存储操作②文件存储
  10. Android Handler机制12之Callable、Futur