浏览器 IndexedDB 简明教程 ( 十三 ) - 索引

yufei       6 年, 3 月 前       1726

好了,终于把 IndexedDB 中的对数据的增删改查都简单的讲解完了,不过我觉得很遗憾,后面的几个章节,我都是糊里糊涂的简单的讲解了下,我觉得有时间应该回去梳理下,好好的讲述下这几章节

本章节,我们就来讲讲 IndexedDB 中的索引是怎么回事和索引的对象

索引

如果有人问,为什么需要索引 ?

你会怎么回答 ?

这是一个非常经典的面试题,它考察了两个方向:

  1. 是否知道索引 ?
  2. 为何使用索引 ?

因为只有弄懂了这两个问题,才能轻松自如的使用索引,而不是成为绊脚石

什么是索引 ?

如果你百度或者谷歌以下 「 索引 」,你可以几乎千篇一律的看到如下描述

「 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息 」

错了吗? 没错

但你理解了吗?

  1. 索引首先是一种数据结构,如果你读过什么 「 数据结构与算法 」 等书,你就会明白这几个的含义,如果你不明白,也没关系,你可以理解为 「 存储数据的一种方式 」

  2. 索引的作为范围是某张表,对于 IndexedDB 来说,就是某个存储对象。因此,也就没有所谓的跨表或跨多个存储对象的索引了。理解这个非常重要,从某些方面说,给某个存储对象添加索引,它也只能加快该存储对象的检索,而不能是整个数据库 ( 拖慢有可能,加快是永远几乎不存在 )

  3. 索引针对的是一列或多列。列越少,原则上存储空间和对比数度也会越少

  4. 索引是有序的。也就是说,索引中的值,是有序存在的,要么增序,要么降序

索引的作用

索引的唯一作用,就是 「 加快检索符合特定条件的记录的速度 」

所谓的特定条件,就是索引字段符合某些条件。

加快的是检索速度,而不是其它,也就是说,创建索引和不创建索引,对于存储的数据本身,对于存储对象来说是没有任何的影响的

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 对象,并且在一个单独的线程,返回与键相关联的记录
IDBIndex.getAll([query], [count])(第二版草案) 返回一个 IDBRequest 对象,并且在一个单独的线程,返回在索引中的所有对象
IDBIndex.getKey(key) 返回一个 IDBRequest 对象,并且在一个单独的线程,返回主键的值
IDBIndex.getAllKeys([query], [count]) (第二版草案) 立即检索 IDBObjectStore 内的所有对象的键,设置为result请求的对象
IDBIndex.openCursor([range], [direction]) 返回一个IDBRequest对象,然后在一个独立线程内,在指定键范围内创建一个游标
IDBIndex.openKeyCursor()(第二版草案) 返回一个 IDBRequest 对象,然后在一个独立线程内,在指定键范围内创建一个游标,返回的记录基于索引排序而非主键

相关的方法和属性,我们会在后面的章节中一一介绍

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.