mysql索引笔记

MYSQL索引

1、索引的优缺点

优势:
 
1.经过建立惟一索引,能够保证数据库表中每一行的惟一性。
2.能够大大加快查询速度,这是建立索引的最主要缘由
3.在实现数据参考完整性方面,能够加速表和表之间的连接
4.在使用分组和排序子句进行数据查询时,也能够显著减小查询中分组和查询的时间

缺点:

1.建立索引和维护索引要耗费时间,而且随着数据量的增长所耗费的时间也会增长。
2.索引须要占磁盘空间,除了数据表占数据空间以外,每个索引还要占必定的物理空间,若是有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。
3.当对表中的数据进行增长、删除和修改的时候,索引也要动态地维护,这样就下降了数据的维护速度。

2、索引的分类

1.普通索引和惟一索引

普通索引是MYSQL中的基本索引类型,容许在定义索引的列中插入重复值和空值。
惟一索引,索引列的值必须惟一,但容许有空值,若是是组合索引,则列值的组合必须惟一。主键索引是一种特殊的惟一索引,不容许有空值

2.单列索引和组合索引

单列索引即一个索引只包含一个列,一个表能够有多个单列索引
组合索引指在表的多个字段组合上建立的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,组合索引遵循最左原则

3.全文索引

全文索引类型为fulltext,在定义索引的列上支持值得全文查找,容许在这些索引列中插入重复值和空值。全文索引能够在char、varchar和text类型的列上建立。MYSQL中只有MyISAM支持全文索引

4.空间索引

空间索引是对空间数据类型的字段创建的索引,mysql中的空间数据类型有4种,分别是:GEOMETRY、POINT、LINESTRING和POLYGON.mysql中使用spatial关键字进行扩展,使得可以用于建立正规索引相似的语法建立空间索引。建立空间索引的列,必须将其声明为NOT NULL,空间索引只能在MyISAM中建立

3、索引的设计原则

1.索引并不是越多越好,一个表中若有大量的索引,不只占用磁盘空间,并且会影响INSERT、DELETE、UPDATE等语句的性能,由于当表中的数据更改的同时,索引也会进行调整和新。
2.避免对常常更新的表进行过多的索引,而且索引中的列尽量少。而对常常用于查询的字段应该建立索引,但要避免添加没必要要的字段。
3.数据量小的表最好不要使用索引,因为数据较少,查询花费的时间可能比遍历索引的时间还要短,索引可能不会产生优化效果。
4.在条件表达式中常常用到的不一样值较多的列上创建索引,在不一样值不多的列上不要创建索引。好比在学生表的“性别”字段上只有“男”与“女”两个不一样值,所以就无须创建索引。若是创建索引不但不会提升查询效率,反而会严重下降数据更新速度。
5.当惟-性是某种数据自己的特征时,指定惟一索引。使用惟一索引需能确保定义的列的数据完整性,以提升查询速度。
6.在频繁进行排序或分组( 即进行group by或order by操做)的列上创建索引,若是待排序的列有多个,能够在这些列上创建组合索引。

4、建立索引,建立索引分为三种方法

1.建立表时指定索引

  create table book (
            id int primary key auto_increment,  #主键自增
            name varchar(255) not null unique,  #惟一索引
            author varchar(255) not null,
            info varchar(255),
            comment varchar(255),
            year int(11) ,
            index (year)  #普通索引
        );
 
能够定义字段的时候定义索引,也能够在最后给指定列定义索引
 
eg:
惟一索引:unique index index_name(col) 
组合索引 : index index_name(col,col1,col2)
全文索引:fulltext index fullTxtIdx(col)------只有MyISAM支持
空间索引:spatial index spaIdx(col)————只有MyISAM支持 
 
组合索引遵循最左原则:利用索引中最左边的列集来匹配行。这样的列集成为最左前缀

2.修改表时添加索引

语法: ALTER TABLE table_name add [ unique | fulltext | spatial] [index | key ] [index_name] (col(length),... )[ ASC | DESC]
 
3.为存在的表添加索引
create [unique | fulltext | spatial] index index_name on table_name (col(length))[ASC | DESC]
eg: ALTER TABLE `dev_djbisai`.`dj_game_contest_user` ADD UNIQUE INDEX `a`(`status`, `create_time`) USING BTREE COMMENT 'aaaa';
 
5、删除索引
1.使用ALTER TABLE 删除索引
    ALTER TABLE table_name DROP INDEX index_name;
相关文章
相关标签/搜索