数据库索引

一.索引的引用

索引类似于一本书的目录,可以根据页码更快的查找到内容。索引可以加快访问数据库的速度

二.索引的分类

1.按表的列属性分类

(1).普通索引:最基本的索引,没有任何限制;

(2).唯一索引:索引列的值必须唯一,允许有空值。如果是组合索引,则列值的组合必须唯一;

(3).主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;

(4).组合索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合;

(5).全文索引:主要用来查找文本中的关键字,而不是直接与索引中的值相比较,mysqlMyISAM支持全文索引而InnoDB不支持;

2.按数据结构分类

MySQL存储引擎InnoDB,MyISAM和Memory分别支持的索引类型

 InnoDB MyISAM Memory
B树 Yes Yes Yes
Hash No No Yes
FullText Yes Yes No

B树:基于平衡二叉树,默认使用的索引类型

B- 叶子节点无水平指针
B+ 叶子节点有水平指针,可以方便范围查询
B* 枝节点有水平指针,mysql当前默认

R树:R树是B树在高维空间的扩展,是一棵平衡树

Hash:基于哈希表实现,只有精确匹配索引所有列的查询才有效。

FullText:基于相似度的查询,而不是精确数值比较。

GIS:以较小的数据量管理大量数据的查询,从而提高空间查询的效率和空间定位的准确性。

3.按存储结构分类

(1).聚集索引(唯一性):

        MySQL 会自动选择主键作为聚集索引列,没有主键会选择唯一键,如果都没有会生成隐藏的.
        MySQL进行存储数据时,会按照聚集索引列值的顺序,有序存储数据行
        聚集索引直接将原表数据页,作为叶子节点,然后提取聚集索引列向上生成枝和根

(2).辅助索引(多个):

        提取索引列的所有值,进行排序
        将排好序的值,均匀的存放在叶子节点,进一步生成枝节点和根节点
        在叶子节点中的值,都会对应存储主键ID

辅助索引细分还可以分为:唯一索引,单列辅助索引,联合索引

(3).聚集索引和辅助索引的区别

表中任何一个列都可以创建辅助索引,在你有需要的时候,只要名字不同即可
在一张表中,聚集索引只能有一个,一般是主键.
辅助索引,叶子节点只存储索引列的有序值+聚集索引列值.
聚集索引,叶子节点存储的时有序的整行数据.
MySQL 的表数据存储是聚集索引组织表,辅助索引查询表。
注:mysql的查询过程就是通过辅助索引找到主键索引的id号,再通过主键索引查数据行

三.索引的命令操作

查询索引 
desc city;
PRI   ==> 主键索引 
MUL   ==> 辅助索引
UNI   ==> 唯一索引 

mysql> show index from city\G

创建索引

单列的辅助索引:
mysql> alter table city add index idx_name(name);

多列的联合索引:
mysql> alter table city add index idx_c_p(countrycode,population);

唯一索引: 
mysql> alter table city add unique index uidx_dis(district);

mysql> select count(district) from city;
mysql> select count(distinct district) from city;

前缀索引
mysql> alter table city add index idx_dis(district(5));


删除索引 
mysql> alter table city drop index idx_name;

你可能感兴趣的:(数据库,mysql,数据库)