我不明白SQLite中的索引是什么或做什么。 (不是SQL)我认为它允许以升级和降序排序并更快地访问数据。但我只是在这里猜测。
答案 0 :(得分:15)
为什么不用SQL?答案是一样的,但内部细节在实现之间会有所不同。
在列上放置索引会告诉数据库引擎构建一个索引,这个索引允许它在搜索列中的某些值时快速定位行,而不必扫描表中的每一行。
可以使用普通的二叉搜索树构建一个简单的(可能是次优的)索引。
答案 1 :(得分:5)
是的,索引都是关于提高数据访问性能(但以存储为代价) http://en.wikipedia.org/wiki/Index_(database)
答案 2 :(得分:3)
索引(在任何数据库中)是某种类型的列表,它将已排序(或至少可快速搜索)的密钥列表与有关在何处查找与密钥关联的其余数据的信息相关联。
您可能无法在互联网上找到有关此内容的信息,因为您认为这是一个SQLite概念,但事实并非如此 - 它是一般的计算机工程概念。
答案 3 :(得分:3)
想一下地址簿。如果您正在搜索Rossi Mario的电话号码,您知道姓氏按字母顺序排序,因此您可以转到R
字母,然后搜索字母o
,依此类推。索引也是如此,是对条目的引用集合,可以加速一些操作。
在无序的地址簿中搜索会慢得多,您应该从第一页上的第一个名称开始,然后在所有页面中搜索,直到找到您要查找的名称。
答案 4 :(得分:2)
我认为它允许排序 升级和降序 更快地访问数据。
是的,这就是它的用途。索引创建了对已排序数据的抽象,从而显着加快了搜索速度。使用平衡二叉搜索树的索引,搜索采用O(log N)而不是O(N)时间。
其他答案没有提到大多数数据库使用索引来实现UNIQUE
(因此也是PRIMARY KEY
)约束。因为为了确保唯一性,您必须能够检测密钥是否已经存在,这意味着您需要快速搜索它。
查看您的SQLite数据库。创建了这些sqlite_autoindex_
索引以强制执行UNIQUE约束。
答案 5 :(得分:1)
与任何SQL(YES SQL)RDBMS中的索引相同。
您可以看到SQLite查询优化器会考虑索引:http://www.sqlite.org/optoverview.html
答案 6 :(得分:0)
不同类型的SQLite索引以不同的方式加快了搜索和排序的速度。 以下tutorial很好地说明了这一点。