MySQL——索引(一)

——自我学习记录用

1. 数据库的分类

  按存储介质的不同,分为基于磁盘的数据库系统,如:MySQL、Oracle、SQL Server、DB2数据库;基于内存的数据库系统,如:MySQL NDB Cluster、Oracle Ten Times;基于两者的混合型数据库。

  基于内存的数据库是最快的,因为不需要对磁盘进行读写操作。基于磁盘的数据库,一般都有一个缓冲池,将磁盘中一部分数据(称为页或者块)放入缓冲池,数据库先判断,该页是否在缓冲池中,如果在则直接读取数据,如果不在则从磁盘上读取。如果需要修改数据库中的数据,则直接在缓冲池直接修改,修改结果会异步到磁盘中,对缓冲池的维护是基于最近最少使用(Least Recently Used, LRU)算法实现的。理论上来说,缓冲池越大性能越好,当数据库中所有数据都放入缓冲池中,性能最优。

2. 建立索引的目的

  加快数据查询,减少系统响应时间。索引是针对数据表中的列而言的,读取数据时,只读取相关列,而不是整个表。MySQL中有:B+树索引、T树索引和Hash索引。

3. 数据结构与算法(后续补充)

  3.1 二分查找法

    也叫折半查找,比如一个有序数组A,查找A中数据B的位置,先找数组的中间值,将中间值与B相比较,如果中间值大于B,则说明B在数组A前半部分,重复之前操作,直

  到找到B,反之亦然。

  3.2 二叉查找树和平衡二叉树

    二叉查找树,树状结构(根节点、左子树、右子树),左子树上所有节点小于根节点,右子树上所有节点大于根节点,简单的说,所有左孩子小于父结点,而父结点小于右

  孩子。

      平衡二叉树则在二叉树的基础上再加一个条件:任何节点的两棵子树高度差不大于1。

  3.3 B树、B-树和B+树

  3.4 Hash

  3.5 T树

4. 索引分类

  4.1 单列索引

    单列索引分为普通索引、唯一索引和主键索引,普通索引允许定义索引的那一列插入重复值和空值,唯一索引只允许插入唯一值和空值,主键索引只允许插入唯一值。

  4.2 组合索引

    在数据表中多个列组合创建索引

  4.3 全文索引

    只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引,全文索引类似于关键字搜索。

  4.4 空间索引

    空间索引是对空间数据类型字段建立的索引:GEOMETRY、POINT、LINESTRING、POLYGON。

5. 创建索引

  5.1 创建普通索引

    create table tableName (filedName...dataType..., index|key  indexName   (filedName));如果没有给出索引名,系统会默认索引名为字段名

  5.2 创建唯一索引

    create table tableName (filedName...dataType...,unique index|key  indexName   (filedName));

  5.3 创建主键索引

    create table tableName (filedName...dataType..., primary key  indexName   (filedName));

  5.4 创建联合索引

    create table tableName (filedName...dataType..., index  indexName   (filed1Name,filed2Name...));联合索引遵循最左前缀,如(filed1,filed2,filed3)的最左前缀为(filed1)、(filed1,filed2)、(filed1,filed2,filed3),只要是以三种类型出现的查询都是联合索引查询。

  5.5 创建全文索引

    create table tableName (filedName...dataType..., fulltext index indexName (filedName));需要说明的是,全文索引的字段值,必须是CHAR,VARCHAR,TEXT类型,且

  存储引擎必须是MyISAM,该索引字段值的特点是,大量文本,可以通过关键字查到该文本所在行数。使用时需要借用Match函数:

    where Match(filedName)against(char/varchaer/text)

  5.6 创建空间索引

    create table tableName (filedName...dataType..., spatial indexName  (filedName));

6. 添加和删除

  这里的添加和删除,是针对已经创建好的表而言的

  添加:ALTER TABLE TABLENAME ADD INDEX INDEXNAME (FILEDNAME);CREATE INDEX  INDEXNAME ON TABLENAME(FILEDNAME)

  删除:ALTER TABLE TABLENAME DROP INDEX INDEXNAME (FILEDNAME);DROP INDEX  INDEXNAME ON TABLENAME(FILEDNAME)

7. 索引的优缺点

  优点:增加查询速度,减少响应时间

  缺点:索引的创建和维护耗费时间,并且随着数据量的增加,耗费时间会增加。此外,索引也不是越多越好,索引也会占据空间,达到上限;对表进行增删改查的时候,索引也需要维护,耗费时间。

 

posted on 2018-10-25 09:37  岁月磨平青春的棱角  阅读(122)  评论(0)    收藏  举报

导航