为什么需要索引

数据在磁盘上是以 数据块(block) 的形式存储的。为确保对磁盘操作的原子性,访问数据的时候会一并访问所有的数据块。磁盘上的这些数据块 与 链表类似,即它们都包含一个数据段 和 一个指向下一个节点(或者块)的指针,并且 它们都不需要连续存储(即使逻辑上相邻的记录在磁盘上也 并不一定是物理相邻的)。

对于这样杂乱无章的数据,如果数量达到一定级别,使用全表扫描进行查询,相当耗时。但是我们可以借助一些查询算法来帮助我们提高效率。而这些算法又是基于一定的数据结构。例如 树表查找,哈希查找 等。这种通过维护 另一种数据结构 和 原数据 映射关系 来实现快速查询的 方式 就是 索引。

什么是索引

索引是一种数据结构,这种数据结构在逻辑 和 物理上均独立于关联表中的数据,常见的数据结构有 B-tree,哈希表。索引是对表中的多个字段的一种排序方式。当对表中的某个字段创建索引后,就创建了持有该字段值的数据结构,并且会有一个指针指向所对应的记录,这种索引的数据结构是经过排序的。

 

创建索引     

 

2. 语法                         

csv库行索引列索引 索引 index_数据结构

创建普通索引

列上的值是允许重复的

 

create index index_name
on table_name (column name)

创建唯一索引

列上的值不允许重复

 

 

create unique index index_name
on table_name (column_name)

创建聚集索引:

 

 

CREATE INDEX index_name
on table_name (column1, column2);

 

创建位图索引:

 

 

CREATE BITMAP INDEX index_name ...

 

哪些地方要创建索引:

 

在经常需要搜索的列上,可以加快搜索的速度;

在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;

在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;

在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;

在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;

在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

 

哪些地方不适合创建索引:

小的数据表不应当使用索引;
需要频繁进行大批量的更新或者插入操作的表;
如果列中包含大数或者 NULL 值,不宜创建索引;
频繁操作的列不宜创建索引。