索引

优点:大大提高MySQL的检索速度。

缺点:1.降低更新表(INSERT、UPDATE和DELETE)的速度(原因:更新表时,MySQL不仅要保存数据,还要保存一下索引文件。);

        2.索引文件占用磁盘空间。

索引分: 单列索引:一个索引只包含单个列----ALTER TABLE  表名  ADD INDEX (字段名)

             组合索引:一个索引包含多个列----ALTER TABLE  表名  ADD INDEX (字段名1,字段名2,字段名3,  ......)

例如,有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子句满足条件行的搜索,而在多表连接查询时,在执行连接时加快了与其他表中的行匹配的速度。

-- MYSQL添加索引
ALTER TABLE   表名  ADD INDEX (字段名)
-- MYSQL删除索引
ALTER TABLE   表名  DROP INDEX 字段名 
-- MYSQL显示索引
SHOW INDEX FROM 表名

原文地址:https://www.cnblogs.com/zxg-6/p/8669426.html