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. 索引的优缺点
优点:增加查询速度,减少响应时间
缺点:索引的创建和维护耗费时间,并且随着数据量的增加,耗费时间会增加。此外,索引也不是越多越好,索引也会占据空间,达到上限;对表进行增删改查的时候,索引也需要维护,耗费时间。
浙公网安备 33010602011771号