好了,终于把 IndexedDB 中的对数据的增删改查都简单的讲解完了,不过我觉得很遗憾,后面的几个章节,我都是糊里糊涂的简单的讲解了下,我觉得有时间应该回去梳理下,好好的讲述下这几章节
本章节,我们就来讲讲 IndexedDB 中的索引是怎么回事和索引的对象
索引
如果有人问,为什么需要索引 ?
你会怎么回答 ?
这是一个非常经典的面试题,它考察了两个方向:
- 是否知道索引 ?
- 为何使用索引 ?
因为只有弄懂了这两个问题,才能轻松自如的使用索引,而不是成为绊脚石
什么是索引 ?
如果你百度或者谷歌以下 「 索引 」,你可以几乎千篇一律的看到如下描述
「 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息 」
错了吗? 没错
但你理解了吗?
-
索引首先是一种数据结构,如果你读过什么 「 数据结构与算法 」 等书,你就会明白这几个的含义,如果你不明白,也没关系,你可以理解为 「 存储数据的一种方式 」
-
索引的作为范围是某张表,对于 IndexedDB 来说,就是某个存储对象。因此,也就没有所谓的跨表或跨多个存储对象的索引了。理解这个非常重要,从某些方面说,给某个存储对象添加索引,它也只能加快该存储对象的检索,而不能是整个数据库 ( 拖慢有可能,加快是永远几乎不存在 )
-
索引针对的是一列或多列。列越少,原则上存储空间和对比数度也会越少
-
索引是有序的。也就是说,索引中的值,是有序存在的,要么增序,要么降序
索引的作用
索引的唯一作用,就是 「 加快检索符合特定条件的记录的速度 」
所谓的特定条件,就是索引字段符合某些条件。
加快的是检索速度,而不是其它,也就是说,创建索引和不创建索引,对于存储的数据本身,对于存储对象来说是没有任何的影响的
IDBIndex
IndexedDB 中的索引使用 IDBIndex
对象来表示,它提供了对索引元素的访问
IDBIndex 属性
属性 | 名称 |
---|---|
IDBIndex.name | 只读,返回该索引的名称 |
IDBIndex.objectStore | 只读,此索引引用对象存储的名称 |
IDBIndex.keyPath | 只读,返回 keyPath 的值 |
DBIndex.multiEntry | 只读,返回 IDBObjectStore.createIndex 方法设置的 multiEntry 属性 |
IDBIndex.unique | 只读,返回 IDBObjectStore.createIndex 方法设置的 unqie 属性 |
IDBIndex 方法
方法 | 描述 |
---|---|
IDBIndex.count( ) | 返回一个 IDBRequest 对象,并在一个单独的线程内返回范围内键的数目 |
IDBIndex.get(key) | 返回一个 IDBRequest 对象,并且在一个单独的线程,返回与键相关联的记录 |
返回一个 IDBRequest 对象,并且在一个单独的线程,返回在索引中的所有对象 | |
IDBIndex.getKey(key) | 返回一个 IDBRequest 对象,并且在一个单独的线程,返回主键的值 |
立即检索 IDBObjectStore 内的所有对象的键,设置为result请求的对象 | |
IDBIndex.openCursor([range], [direction]) | 返回一个IDBRequest对象,然后在一个独立线程内,在指定键范围内创建一个游标 |
返回一个 IDBRequest 对象,然后在一个独立线程内,在指定键范围内创建一个游标,返回的记录基于索引排序而非主键 |
相关的方法和属性,我们会在后面的章节中一一介绍