概述复合索引可基于多字段进行排序与筛选。本文使用原生 IndexedDB 展示多维范围查询。建表与复合索引function openDB(name) { return new Promise((resolve, reject) => { const r = indexedDB.open(name, 1); r.onupgradeneeded = () => { const db = r.result; const store = db.createObjectStore('items', { keyPath: 'id' }); store.createIndex('byTypeCreated', ['type', 'createdAt']); }; r.onsuccess = () => resolve(r.result); r.onerror = () => reject(r.error); }); } async function queryTypeInRange(type, start, end) { const db = await openDB('composite'); const tx = db.transaction('items', 'readonly'); const idx = tx.objectStore('items').index('byTypeCreated'); const range = IDBKeyRange.bound([type, start], [type, end]); const req = idx.openCursor(range); const out = []; await new Promise((resolve, reject) => { req.onsuccess = e => { const c = e.target.result; if (c) { out.push(c.value); c.continue(); } else resolve(); }; req.onerror = () => reject(req.error); }); db.close(); return out; } 注意事项复合索引键使用数组表达;查询范围需保持同一前缀维度。变更索引需通过版本迁移进行。

发表评论 取消回复