HTML5 本身不提供 CreateIndex 或数据库索引功能,真正支持索引的是其内置的 IndexedDB;它允许在版本升级事务中调用 createIndex() 为非主键字段创建单字段或复合索引,从而将查询从 O(n) 优化至近 O(log n)。

HTML5 本身不提供 CreateIndex 或任何数据库索引功能。这个说法存在根本性误解——HTML5 是标记语言规范,不包含数据库引擎或索引机制。
真正支持索引的是 IndexedDB
在 HTML5 标准中,IndexedDB 是浏览器内置的客户端 NoSQL 数据库,它支持通过 createIndex() 方法为对象存储(Object Store)创建非主键索引,从而加速按非键字段的查询。
- 主键(keyPath)默认唯一且自动建立索引;非主键字段需手动调用
createIndex()创建辅助索引 - 索引可支持单字段、多字段(使用数组指定 keyPath),并可配置
unique和multiEntry选项 - 例如:对用户表按
email字段建索引,就能快速查找某邮箱对应的用户,无需遍历全部记录
createIndex() 的基本用法
必须在版本升级事务(onupgradeneeded)中调用,不能在普通读写事务里创建:
request.onupgradeneeded = function(event) {
const db = event.target.result;
const store = db.createObjectStore('users', { keyPath: 'id' });
// 为 email 字段创建非主键索引
store.createIndex('emailIndex', 'email', { unique: true });
// 为 status + createdAt 复合字段建索引
store.createIndex('statusTimeIndex', ['status', 'createdAt']);
};
索引如何提升检索效率
没有索引时,按非主键字段查询需打开游标遍历全部数据(O(n) 时间复杂度);有了索引后,可通过 index.get() 或 index.openCursor() 直接定位匹配项(接近 O(log n))。
-
index.get(value):查单个值(如emailIndex.get('user@example.com')) -
index.openCursor(IDBKeyRange.bound(...)):查范围(如状态为 'active' 且时间大于某值的记录) - 注意:索引会占用额外存储空间,并略微降低写入性能,应按实际查询需求合理创建
常见误区提醒
不是所有字段都适合建索引。以下情况需谨慎:
- 极少用于查询条件的字段(索引白白占空间)
- 高重复率字段(如布尔型
isDeleted),选择性低,效果有限 - 频繁更新的字段(每次修改都要同步更新索引)
- 误以为 localStorage 或 sessionStorage 支持索引(它们只是键值对存储,无索引能力)
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











