1.索引的优缺点:
优点:可以提高检索数据的速度,对于有依赖关系的子表与父表之间的联合查询时;使用分组和排序子句进行数据查询时。
缺点:创建和维护索引需要耗费时间;耗费时间的数据随数据量的增加而增加;索引需要物理空间,每个索引要做占一定的物理空间;增加、删除、和修改数据时,要动态维护索引,造成数据的索引速度下降。
索引可以提高查询速度,但会降低插入记录的速度。


2.索引的分类:
索引分为普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引。


2.1 普通索引:在创建普通索引时不附加任何条件。
2.2 唯一性索引:使用unique可以设置索引为唯一性索引。
2.3 全文索引:使用fulltext可以设置索引为全文索引。全文索引只能创建在CHAR、VARCHAR或TEXT类型的字段上。只有MyISAM存储引擎支持。
2.4 单列索引:在表的单个字段上创建索引。只根据该字段索引。
2.5多列索引:在表的多个字段上创建索引。该索引指向创建时的多个字段,可以通过几个字段查询。但是只有当查询条件使用了这些字段的第一个
字段时,索引才会使用。
2.6 空间索引:使用SPATIAL参数可以设置索引为空间索引。必须是MyISAM存储引擎,而且索引字段必须有非空约束。


3.索引的设计原则:
3.1 选择唯一行索引
3.2 为经常需要排序、分组和联合操作的字段建立索引
3.3 为常作为查询条件的字段建立索引
3.4 限制索引的数目
3.5 尽量使用数据量小的索引
3.6 尽量使用前缀来索引
3.7 删除不再使用或使用很少的索引


4.创建索引:
4.1 在创建表时创建索引
create table 表名(属性名 数据类型 [完整性约束条件],
   属性名 数据类型 [完整性约束条件],

……
   属性名 数据类型
   [unique|fulltext|spatial] index|key
   [别名] (属性名1 [(长度)] [asc|desc])
 );
 //别名:用来给创建的索引取的新名称。
 //长度:索引的长度,必须是字符串类型才可以使用。
 //asc:升序排列 desc:降序排列


 create table index1( id1 int,
                       id2 int unique,
  name varchar(20),
  sex  char(4),
  index(id1)//在id1段建立索引
  unique index  index_idx2(id2 asc)//在id2段建立名为index_idx2的唯一索引,且以升序形式排序
  index index4_st(name(10))//在name字段建立名为index4_st的单列索引,索引长度为10
  index index5_st(name ,sex)//name和sex字段建立一个名为index5_st的多列索引。
  
 );



4.2 在已经存在的表上建立索引
create [unique|fulltext|spatial] index 索引名 on 表名 (属性名 [(长度)][asc|desc]);


4.3 使用 ALTER TABLE语句创建索引
alter table 表名 add [unique|fulltext|spatial] index 索引名 (属性名 [(长度)][asc|desc]);


5.删除索引
drop index 索引名 on 表名;