您现在的位置: 365建站网 > 365学习 > mysql操作之添加删除索引的方法

mysql操作之添加删除索引的方法

文章来源:365jz.com     点击数:225    更新时间:2017-12-01 19:41   参与评论

索引作用

在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率。特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍。

例如,有3个未索引的表t1、t2、t3,分别只包含列c1、c2、c3,每个表分别含有1000行数据组成,指为1~1000的数值,查找对应值相等行的查询如下所示。

SELECT c1,c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3
此查询结果应该为1000行,每行包含3个相等的值。在无索引的情况下处理此查询,必须寻找3个表所有的组合,以便得出与WHERE子句相配的那些行。而可能的组合数目为1000×1000×1000(十亿),显然查询将会非常慢。

如果对每个表进行索引,就能极大地加速查询进程。利用索引的查询处理如下。

(1)从表t1中选择第一行,查看此行所包含的数据。
(2)使用表t2上的索引,直接定位t2中与t1的值匹配的行。类似,利用表t3上的索引,直接定位t3中与来自t1的值匹配的行。
(3)扫描表t1的下一行并重复前面的过程,直到遍历t1中所有的行。

在此情形下,仍然对表t1执行了一个完全扫描,但能够在表t2和t3上进行索引查找直接取出这些表中的行,比未用索引时要快一百万倍。
利用索引,MySQL加速了WHERE子句满足条件行的搜索,而在多表连接查询时,在执行连接时加快了与其他表中的行匹配的速度。
 

一、创建删除主建索引

1.在创建表时就创建好索引

CREATE TABLE `student` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL,
`age` tinyint(2) NOT NULL DEFAULT '0',
`dept` varchar(16) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

对应该的删除主键要有两步来完成:1).Alter table student modify id int(4) not null;//删除自增长 2).alter table student drop primary key;

2.建表时忘记创建主键索引时, 在之后手动创建

alter table student modify id int(4) primary key auto_increment;

或者alter table student add primary key (id); alter table student change id id int(4) not null auto_increment;

二、创建删除唯一索引和普通索引

create [UNIQUE] index idx_name on student (name);

alter table student add index idx_union (age,dept);

----------------------------------------------------------------

alter table student drop index idx_name;

drop INDEX index_name ON tbl_name

 

查看索引 show index from student\G

 

基本创建索引的原则:

1.索引会加快查询速度,但是会影响更新的速度,因为更新后要维护索引。

2.索引不是越多越好,要是频繁查询的where条件列上创建索引。

3.小表或唯一值极少的列上不要建索引,要在大表以及不同内容多的列上创建索引。

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛


发表评论 (225人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换图片
最新评论
------分隔线----------------------------