索引

索引是对数据库表中一列或多列的值进行排序的一种结构。是一个单独的、存储在磁盘上的数据库结构。

索引优点


1.提高数据库的查询速度



2.创建唯一索引可以保证数据库表中每一行数据的唯一性



3.使用分组和排序字句进行数据查询时,也可以显著减少查询中分组和排序的时间


缺点:



1.创建索引和维护耗费时间 并且随着数据量的增加所耗费的时间也会增加



2.索引需要占磁盘空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果大量的索引,索引文件可能比数据文件



更快达到最大文件尺寸


3.当对表中的数据进行增加、删除、修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

索引在存储引擎中实现
mysql索引和存储引擎有关 存储类型有两种 btree hash
MyISAM 和InnoDB  支持btree索引
memory heap  支持hash和btree索引

设计原则
1.索引并非越多越好
2.避免对经常更新的列进行过多的索引
3.数据量小的最好不要使用索引(数据少,查询时间可能比遍历索引的时间还要短)
4.条件表达式中 常用到不同值较多的列建立索引 不同值少的列上不要建立索引(不但不会提高查询效率,反而严重降低更新速度)
5.当唯一性是某种数据本身的特征,指定唯一索引,使用唯一索引需能确保定义的列的数据完整性。提高查询速度
6.在进行频繁进行排序或分组的列上建立索引,如果待排序的列有多个,可以在这些列上建立组合索引

索引分类
1.普通索引 唯一索引
普通索引是基本索引,可以在索引列中插入重复值和空值
唯一索引 唯一 允许有空值 
2.单列索引和组合索引
单列索引即一个索引只包含单个列,一个表可以有多个单列索引
组合索引 多个字段组合建立索引。只有查询条件中使用这些字段的左边字段时,索引才会被使用,遵循最左前缀集合
3.全文索引
类型FULLTEXT 
4.空间索引

建立索引 
1.创建表时
CREATE TABLE table_name[
col_name data_type,
...,
[UNIQUE|FULLTEXT|SPATIAL][INDEX|KEY][index_name](col_name[length])[ASC|DESC]
]


[UNIQUE|FULLTEXT|SPATIAL] 唯一索引。全文索引。空间索引。
[INDEX|KEY] index key 同意 指定创建索引
col_name为需要创建索引的字段列 从数据表中定义的说个列中选择
[index_name] 索引名称 可选
(col_name[length]) col_name为可选参数 length为可选参数 表示索引的长度 只有字符串类的字段才能指定索引长度
[ASC|DESC] 指定升序或者降序的索引值存储


2.在已经存在的表中创建索引
2.1 使用alert
ALERT TABLE table_name ADD[UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY]
[index_name](col_name[length],...)[ASC|DESC]
EG:ALERT TABLE book ADD INDEX BknameIdx(bookname(30))
2.2使用CREATE INDEX
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
ON table_name(col_name[length],..)[ASC|DESC]
EG: CREATE INDEX BkNameIdx ON book(bookname)

删除索引
1.使用alert table
alert table table_name drop index index_name;
2.使用drop index 语句删除索引
drop index index_name on table_name;