发布于 2015-07-25 11:44:32 | 524 次阅读 | 评论: 0 | 来源: 网络整理
索引是一种特殊的查找表,可以使用搜索引擎的数据库,以加快数据检索。简单地说,索引是一个指针,表中的数据。一个数据库中的索引是非常相似在一本书的背部的索引。
例如,如果你想在一本书中引用的所有页面讨论某个话题,先参考索引,按字母顺序列出所有主题,再交由一个或多个特定的页码。
索引有助于加快SELECT查询和WHERE子句,但它会减慢数据的输入,UPDATE和INSERT语句。索引可以创建或删除,但数据不会影响。
创建索引涉及CREATE INDEX语句,它允许命名的索引,索引指定表的一列或多列,并指示索引是否在升序或降序排列。
索引也可以是唯一的,类似UNIQUE约束,在列上有一个索引的列或组合索引防止重复条目。
CREATE INDEX的基本语法如下:
CREATE INDEX index_name ON table_name;
单列索引是一个只有基于一个表的列上创建。基本语法如下:
CREATE INDEX index_name
ON table_name (column_name);
使用唯一索引不仅是性能,同时也为数据的完整性。唯一索引不允许任何重复的值插入到表中。基本语法如下:
CREATE INDEX index_name
on table_name (column_name);
组合索引是一个表的两个或多个列上的索引。基本语法如下:
CREATE INDEX index_name
on table_name (column1, column2);
是否要创建一个单列索引或组合索引,考虑到列,可以使用非常频繁查询的WHERE子句作为过滤条件。
应该有一列,单列索引应该是选择。如果有两个或多个列中经常使用的WHERE子句作为过滤器,组合索引将是最好的选择。
隐式式索引是由数据库服务器创建一个对象时,会自动创建索引。索引自动创建的主键约束和唯一约束。
下面是一个例子,我们将创建一个索引表COMPANY的 薪水列:
sqlite> CREATE INDEX salary_index ON COMPANY (salary);
现在,让我们列出了所有的索引,COMPANY表使用.indices命令如下:
sqlite> .indices COMPANY
这将产生以下结果,其中sqlite_autoindex_COMPANY_1是创建表本身时创建了一个隐式索引。
salary_index
sqlite_autoindex_COMPANY_1
可以列出所有的索引数据库范围如下:
sqlite> SELECT * FROM sqlite_master WHERE type = 'index';
一个索引可以使用SQLite DROP命令删除。应注意当删除索引,因为性能可能会减缓或改善。
基本语法如下:
DROP INDEX index_name;
可以使用下面的语句来删除以前创建的索引:
sqlite> DROP INDEX salary_index;
虽然索引的目的在于提高数据库的性能,有时间时,应避免。使用索引时,应重新考虑下列准则:
索引不应该使用较小的表上。
有频繁的,大批量的更新或插入操作的表。
索引不应使用含有大量的NULL值的列。
频繁操作的列都将不会被索引。