1。创建索引的方法可以在创建索引时指定,也可以在建表后使用altertable或createindex语句创建索引。下面展示几种常见的索引创建场景。#建表时指定索引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);#prefixindexaltertable`t_index`addindexidx_col5(col5(20));createindexidx_col5ont_index(col5(20));#查看表索引mysqlshowindexfromt_index;+--------+------------+---------+-------------+----------------+------------+------------+-----------+--------+------+------------+--------+----------------+|Table|Non_unique|Key_name|Seq_in_index|Column_name|Collat??ion|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>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权限授予索引权限然后执行mysql>createindexidx_col3ont_index(col3);QueryOK,0rowsaffected(0.04sec)Records:0Duplicates:0Warnings:0从上面的测试可以看出,使用altertable创建了一个index需要alter权限,使用createindex创建索引需要index权限。另外,删除索引也可以使用altertable`tb_name`dropindexxxx和dropindexxxxontb_name,分别需要alter和index权限。索引的优势显然是可以加快查询速度,但是创建索引也是有代价的。首先,每创建一个索引,都要为其建立一棵B+树,会占用额外的存储空间;其次,对表中的数据进行增删改查时,索引也需要动态维护,降低了数据维护的速度。所以,我们在创建索引的时候,还是要根据业务来考虑。建议不要给一个表添加太多的索引。
