SQLite中的索引是什么?

问题描述 投票:15回答:7

我不了解SQLite中的索引是什么或做了什么。 (不是SQL)我认为它允许按升序和降序排序,并可以更快地访问数据。但我只是在这里猜测。

sqlite indexing
7个回答
15
投票

为什么不使用SQL?答案是相同的,尽管内部细节在实现之间会有所不同。

毫不奇怪,在列上放置索引将使数据库引擎构建一个索引,毫不奇怪,当您在列中搜索某些值时,它无需扫描表中的每一行就可以快速定位行。

可以使用普通的二进制搜索树来构建简单(可能不是最佳选择)的索引。


5
投票

是的,索引都是关于改善数据访问性能(但要以存储为代价)http://en.wikipedia.org/wiki/Index_(database)


3
投票

(在任何数据库中的索引都是某种类型的列表,该列表将排序的(或至少是可快速搜索的)密钥列表与有关在何处查找与该密钥关联的其余数据的信息相关联。

您可能没有在Internet上找到有关此信息的信息,因为您假设它是SQLite概念,但不是-它是通用的计算机工程概念。


3
投票

想想一个通讯录。如果要搜索Rossi Mario的电话号码,您会知道姓是按字母顺序排列的,因此可以转到字母R,然后搜索字母o,依此类推。索引也是如此,它们是对条目的引用的集合,这些条目可以加快很多操作。

在无序地址簿中搜索会慢得多,您应该从首页上的名字开始,然后在所有页面中进行搜索,直到找到所需的名字。


2
投票

我认为它可以进行排序升序和降序更快地访问数据。

是的,这就是它的用途。索引创建了对已排序数据的抽象,从而大大加快了搜索速度。对于使用平衡二叉搜索树的索引,搜索花费O(log N)而不是O(N)时间。

其他答案没有提到大多数数据库使用索引来实现UNIQUE(因此也实现PRIMARY KEY)约束。因为为了确保唯一性,您必须能够检测密钥是否已经存在,这意味着您需要快速搜索它。

查看您的SQLite数据库。创建那些sqlite_autoindex_索引以强制执行UNIQUE约束。


1
投票

与任何SQL(YES SQL)RDBMS中的索引相同。

您可以看到SQLite查询优化器考虑了索引:http://www.sqlite.org/optoverview.html


0
投票

加快搜索和排序

SQLite索引的不同类型以不同的方式加快了搜索和排序的速度。以下tutorial很好地说明了这一点。

© www.soinside.com 2019 - 2024. All rights reserved.