一、索引基本概念
1000条数据,select查询一条数据,三种查询方式:
- 顺序查询:如果数据无序,最坏情况下,查询1000次,最好情况下,如果查询信息为主键,查询一次,如果不是,代表存在重复数据,那么查询1000次,这就是顺序遍历,时间复杂度为O(N)
- 二分查找:如果数据有序,使用二分查找最坏14次,即O(log2 n),效率高,前提是数据有序。
- 多路查询:O(logxn)效率更高
所以查询密集型数据库,需要查询效率高,如果有序,那么查找速度就会很快。那么索引的概念就出来了:
索引:用来排列数据的数据结构,让数据按照某种规则排列有序,占用空间,可以通过多路查找进行查找数据,提高查询效率。
索引的建立:基于字段,可以提高该字段的查询效率。
更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度,如果没有索引,那么需要一页一页的查询内容。
数据库索引: 是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库表中数据,索引的实现通常使用B树或B+树。(下一篇博客详解MySQL数据库索引)
二、聚集索引和非聚集索引
MySQL数据库普通使用B+树作为索引,索引分为聚集索引和非聚集索引两种:
- 聚集索引:主索引文件和数据文件为同一份文件,即数据存储是集中的。主要用在InnoDB存储引擎中。
- 非聚集索引:主索引文件和数据文件分别存储在两个文件,即数据存储分散。主要用在MyISAM存储引擎中。
【 两者的区别:】
1.存储特点的区别:
- 聚集索引按照索引顺序存储数据,数据行顺序固定,使用B+树做索引时,叶子节点存储真实的数据,一张表上只有一个聚集索引。
- 非聚集索引数据的存储和索引无关,数据行顺序不固定,逻辑连续,物理不连续,叶子节点存储数据的地址。一张表可以存在多个非聚集索引。
2.更新表数据的区别:
- 插入数据时:非聚集索引存储数据的地址,所以将插入的数据添加到表尾即可