索引

索引
    对数据库表中一列或者多列的值进行排序的结构,提供查询效率
分类
    1.普通索引   
        不需要添加任何条件,可以创建任何数据类型,由字段本身的完整性约束决定
    2.唯一索引    
        使用unique参数进行设置,该值必须是唯一的。(主键是一种特殊的唯一索引)
    3.全文索引
        使用gfulltext参数进行设置,只能创建在char,varchar或者text类型的字段上(适用于查询数据量较大的字符串类型的字符时)
    4.单列索引
        在表中单个字段上创建,只能根据该字段进行索引查询,只要保证该索引只对应一个字段即可
    5.多列索引
        在表中多个字段上创建,可通过多个字段进行索引查询(注意:只有查询条件中使用了这些字段中的第一个字段时,索引才会被使用)
        例如:id name age,查询条件使用了id 字段时该索引才会被使用
    6.空间索引
        使用spatial 参数进行设置,只能建立在空间数据类型上。(geometry,point,linestring,polygong..)

设计原则
    1.选择唯一索引
      唯一索引的值是唯一的,可快速通过该索引来确定某条记录
      例如:人---IDcard

    2.为经常需要排序,分组,联合操作的字段建立索引频繁使用group by,order by,distinct ,union 来操作字段时   
    3.经常作为查询条件的字段建立索引

    4.限制索引的数目
        选择合适最好,不求多,只求合适
    5.尽量使用数据量少的索引
        varchar(10) varchar(255) 选前者
    6.尽量使用前缀来索引
      检索值很长时,如:text,blog,只检索前面的若干个字符
    7.不使用或使用频率低的,应尽快删除

Build
    1.创建表时创建索引
     syntax:create table tablename(属性名 数据类型 [完整性约束条件],[unique|fulltext|spatial]index|key[别名](属性名)1[(长度)[asc|desc]] )
         1.1
             create table index(
             id int,
             name varchar(20),
             sex boolean,
             index (id)
             );
         1.2    唯一索引
             create table index2(
             id int,
             name varchar(20),
             unique index index2_id(id asc));
             )
         1.3 全文索引(innoDB 不支持 ,MyISAM支持)
             create table index3(
             id int,
             info varchar(20),
             fulltext index index3_info(info asc)
             );
        1.4 创建单列索引
            .....index(id).......
        1.5 创建多列索引
            .....index(id,name)......
        1.6 创建空间索引
            create table index4(
            id int,
            space geometry not null,
            spatial index index4_sp(space)
            )engine  = MyISAM;
    2.在已存在表中创建索引
        语法:
            create [unique|fulltext|spatial] index 索引名 on tablename(属性名|[长度][asc|desc]);
        2.1创建普通索引        
        create index index5_id on example1(id);

    3.alter table 语句创建索引      
        syntax:alter table tablename add[unique|fulltext|spatial] index 索引名 (属性名[(长度)][asc|desc]);
      3.1 普通
        例子:alter table example add index index8(stu_name(20))      
      3.2 创建唯一索引
          .....add unique index........
      3.3 全文索引
          .......add fulltext index....(数据类型需是char|varchar|text类型)
      3.4 单列索引
          .....add index(id)..........
      3.5 多列索引
        .....add index(id,name).......
      3.6 空间索引
          ...add spatial index ......
          (innoDB不支持全文索引,MyISAM引擎支持,数据类型需支持空间数据类型)
删除索引
   syntax:drop index 索引名 on tablename (及时删除索引,释放内存)



posted @ 2017-10-17 12:57  Yif.Z  阅读(274)  评论(0)    收藏  举报