索引

一、概念

      索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。

        优点:1、大大加快数据的查询速度;2、所有的列类型(字段类型)都可以被索引

        缺点:1、创建和维护索引要耗时;2、索引也需要占空间;3、对表中的数据进行增加、修改和删除时,索引页需要动态的维护,降低了维护速度。

        使用原则:1、对经常更新的表就避免对其过多的索引,对经常用于查询的字段应该创建索引;

                          2、数据量小的表最好不要使用索引;

                          3、在 同值少的列上(字段上)不要建立索引,比如,性别列只有“男”、“女”两个值,不要建立索引。

二、分类

        主要分为4大类:单列索引(普通索引,唯一索引,主键索引)、组合索引、全文索引、空间索引

        单列索引:一个索引只包含单个列,但一个表中可以有多个单列索引。

                普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。

                唯一索引:索引列中的值必须是唯一的,但是允许为空值。

                主键索引:是一种特殊的唯一索引,不允许有空值。

        组合索引:在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。

        全文索引:只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引,就是在一堆文字中,通过其中的某个关键字等,就能找到该字段所属的记录行。

        空间索引:是对空间数据类型的字段建立的索引,MySQL中的空间数据类型有四种,GEOMETRY、POINT、LINESTRING、POLYGON。

        最左前缀--  组合索引就是遵从了最左前缀,利用索引中最左边的列集来匹配行,这样的列集称为最左前缀,例如,这里由id、name和age3个字段构成的索引,索引行中就按id/name/age的顺序存放,索引可以索引下面字段组合(id,name,age)、(id,name)或者(id)。如果要查询的字段不构成索引最左面的前缀,那么就不会是用索引,比如,age或者(name,age)组合就不会使用索引查询

三、创建/删除索引

    建表时:

 CREATE TABLE person
  (
    id INT NOT NULL,
    name CHAR(30) NOT NULL,
    age INT NOT NULL,
    info VARCHAR(255) DEFAULT NULL COMMENT '信息',
    INDEX MultiIdx(id,name,age),
           PRIMARY KEY (`id`) USING BTREE
   )ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='人员信息表';;

 建表后:

 create index name on person(name); #添加普通索引
 create unique age on person(age);添加唯一索引
 alter table person add primary key(id); #添加住建索引,也就是给id字段增加一个主键约束
 create index name on person (id,name); #添加普通联合索引

  

 drop index id on person;
 drop index name on person; #删除普通索引
 drop index age on person; #删除唯一索引,就和普通索引一样,不用在index前加unique来删,直接就可以删了
 alter table person drop primary key; #删除主键(因为它添加的时候是按照alter来增加的,那么我们也用alter来删)

  

posted @ 2022-01-28 16:56  zhangtianhong511  阅读(14)  评论(0)    收藏  举报