`title: IndexedDB 复合索引与覆盖查询实战``categories: Web 开发/前端/数据管理``keywords: IndexedDB,复合索引,覆盖查询,IDBKeyRange,性能``description: 使用复合索引与覆盖查询提升筛选与排序效率,结合范围查询实现高性能分页与条件检索。`复合索引为高频筛选与排序建立复合索引,如 `['owner','createdAt']`。覆盖查询通过索引满足过滤与排序,减少全表扫描与数据反序列化。示例function openDB() { return new Promise((resolve, reject) => { const r = indexedDB.open('idx-db', 1); r.onupgradeneeded = () => { const db = r.result; if (!db.objectStoreNames.contains('items')) { const s = db.createObjectStore('items', { keyPath: 'id' }); s.createIndex('byOwnerCreatedAt', ['owner','createdAt']); } }; r.onsuccess = () => resolve(r.result); r.onerror = () => reject(r.error); }); } async function queryByOwnerCreatedAt(db, owner, start, end, limit = 50) { return new Promise((resolve, reject) => { const tx = db.transaction('items', 'readonly'); const idx = tx.objectStore('items').index('byOwnerCreatedAt'); const range = IDBKeyRange.bound([owner, start], [owner, end]); const out = []; idx.openCursor(range, 'next').onsuccess = e => { const c = e.target.result; if (!c) return resolve(out); out.push(c.value); if (out.length >= limit) return resolve(out); c.continue(); }; tx.onerror = () => reject(tx.error); }); }

发表评论 取消回复