分几种类型:
①添加PRIMARY KEY(主键索引)
ALTER TABLE +table_name+ ADD PRIMARY KEY ( +column+ )
ALTER TABLE +table_name+ ADD UNIQUE (
+column+
)
ALTER TABLE +table_name+ ADD INDEX index_name ( +column+ )
ALTER TABLE +table_name+ ADD FULLTEXT ( +column+)
字符串创建索引方式:
①.、直接创建完整索引,比较占用空间.
倒序存储和hash字段索引都不支持范围查询.倒序存储的字段上创建的所有是按照倒序字符串的方式排序的.hash字段的方式也只能支持等值查询.
mysql alter table SUser add index index1(email); :包含了每个记录的整个字符串
或
全字段索引操作流程
使用的是 index1(即 email 整个字符串的索引结构),执行顺序是这样的:
前缀字段索引操作流程
倒序查询和hash字段的区别
它们的区别,主要体现在以下三个方面:
①添加PRIMARY KEY(主键索引):
select (*) from tb_name where create_time xxx;
最终得知是因为这个表数据行数已经超过 一千万了,然后create_time字段又没有索引 .
那解决办法肯定是加索引喽.
但是这个表是一直在线上运行,很重要和业务部分.如果给千万级的大表在线加索引 ,肯定会卡死.
然后就搜罗了一大筐解决方案,比如 在线无锁加索引使用
ALTER TABLE tbl_name ADD PRIMARY (column), ALGORITHM=INPLACE, LOCK=NONE;
最后在 <<高性能Mysql>>一书中看到,可在通过 "影子拷贝"来解决,
就是 先创建一张和源表无关的新表,然后通过重命名和删表操作交换两张表;
场景:在给一张有几万条记录的表添加索引时,进度非常慢,导致其它查询无法进行
处理方式:
使用Navicat的命令行模式,执行以下命令:
show processlist;
这时会看到有哪些线程正在执行,也可以查看锁表的线程.你会发现alter table * add key ****那个线程状态是Waiting for table metadata lock,后面有个这个表的所有操作都是这个状态,很明显是这条加索引的语句把表给锁了.
查看线程ID,执行
kill 线程ID
这样被锁住的表就能立即被使用了.
由此得出一个结论,当一张表数据量很大时,不要轻易添加索引,会导致表被锁死!如果非要添加,那么应该先把数据表进行备份,然后进行空表添加索引.
只能通过ALTER TABLE不能create index
参数说明:
第一段:CREATE INDEX方法
CREATE INDEX 索引名 ON 表名 (列名 [长度] [ ASC | DESC])
限制:只能增加普通索引INDEX和UNIQUE INDEX索引这两种;不能创建PRIMARY KEY索引
第二段:ALTER TABLE方法
ALTER TABLE 表名 ADD INDEX [索引名] (列名,...)
ALTER TABLE 表名 ADD UNIQUE [ INDEX | KEY] [索引名] (列名,...)
ALTER TABLE 表名 ADD PRIMARY KEY (列名,...)
ALTER TABLE 表名 ADD FOREIGN KEY [索引名] (列名,...)
第三段:CREATE TABLE时候指定
创建一般索引
CREATE TABLE tb_stu_info
(
id INT NOT NULL,
dept_id INT DEFAULT NULL,
age INT DEFAULT NULL,
height INT DEFAULT NULL,
INDEX(height)
);
创建唯一索引
UNIQUE INDEX(height)
创建主键(虽然ALTER TABLE也能创建,但主键一般都在创表时建立)
CREATE TABLE mytable(
ID INT NOT NULL,
PRIMARY KEY(ID)
以上就是土嘎嘎小编为大家整理的mysql索引怎么添加相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!