数据库原理学习一之索引

官方解释:索引就像书的目录, 通过书的目录就准确的定位到了书籍具体的内容
1.索引类型
索引分为聚集索引和非聚集索引,但不论是就聚集索引还是非聚集索引最终都会利用主键通过聚集索引来定位到数据。区别在于通过聚集索引可以查到需要查找的数据, 而通过非聚集索引可以查到记录对应的主键值 , 再使用主键的值通过聚集索引查找到需要的数据
2.索引原理
首先声明:平衡树不是二叉树,平衡树又叫B-tree。
若不建立索引,查询数据必须通过遍历全表,建立索引后,表的数据存储结构会转变成树状结构,即平衡树结构。当一张表没有建立主键时数据的存储结构是无序整齐排列,建立主键后存储结构会转变成树状结构,即整张表形成了一个聚集索引,所以一张表有且仅能有一个聚集索引。(一张表只有一个主键)
建立聚集索引后查询次数为:log(以树的分叉数为底,数据总条数的对数)
3.索引缺点:
索引使查询速度加快,但同时它也让数据库的写入、修改、删除的速度变慢。原因在于对数据库的写入、修改、删除操作都会使平衡树发生变化,每次操作后都必须对索引进行动态维护且不仅要保存数据,还要保存一下索引文件。
创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。数据量越大,维护消耗就越大。
索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
4.索引应用场景
在经常需要搜索的列上,可以加快搜索的速度;
在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
当修改性能大于索引性能或数据量过大或过小的取用较少的列都不应该建立索引
5.Mysql中的四种索引类型
普通索引:最基本的MySQL数据库索引,它没有任何限制
建立一个普通索引:create index 索引名 on 表名(字段名(length));
唯一索引:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
建立一个唯一索引:CREATE UNIQUE INDEX 索引名 ON 表名(字段名(length))
主键索引:是一种特殊的唯一索引,不允许有空值。一般在建表的时候同时创建了主键索引
建立一个主键索引:CREATE TABLE 表名( id INT NOT NULL, username VARCHAR(16) NOT NULL,
PRIMARY KEY(id ) );
组合索引:一个索引包含多个列
建立一个组合索引:CREATE TABLE 表名( id INT NOT NULL, username VARCHAR(16) NOT NULL,
city VARCHAR(50) NOT NULL, age INT NOT NULL );

你可能感兴趣的:(个人总结,数据库学习)