1、MySQL索引的概念
索引是对数据库表中一个或多个列的值进行排序的结构。
例如这样一个查询:select * from table1 where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),即可在索引中查找。由于索引是经过某种算法优化过的,因而查找次数要少的多。可见,索引是用来定位的。
注意:尽管唯一索引有助于定位信息,但为获得最佳性能结果,建议改用主键或唯一约束。
2、索引分类
根据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引。
3、优缺点
优点:
通过建立索引可以极大地提高在数据库中获取所需信息的速度,同时还能提高服务器处理相关搜索请求的效率。
缺点:
建立索引的目的是加快对表中记录的查找或排序。为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。数据库索引就是为了提高表的搜索效率而对某些字段中的值建立的目录 。
4、关于索引的基本命令
查看数据库索引:
mysql> show index from shop;
增加数据库索引
mysql> create index xxx on shop (shoper);
删除数据库索引
mysql> alter table shop drop index xxx;
或者(ALTER TABLE table_name DROP INDEX index_name)
5、问题1:
若删除索引时报错,ERROR 1553 (HY000): Cannot drop index ‘xxx’: needed in a foreign key constraint
解决:
先删除外键约束,才可以删除索引,再恢复外键索引
mysql> alter table shop drop foreign key shop_ibfk_1;
mysql> alter table shop drop index xxx;
mysql> alter table shop add foreign key (shoper) references user(name);