Ответ 1
В вашем примере составной индекс все еще работает, но для него требуются два составных индекса
objectStore.createIndex('ssn, email, age', ['ssn', 'email', 'age']); // corrected
objectStore.createIndex('ssn, email, name', ['ssn', 'email', 'name'])
И запрос вроде этого
keyRange = IDBKeyRange.bound(
['444-44-4444', '[email protected]@company.com'],
['444-44-4444', '[email protected]@company.com', ''])
objectStore.index('ssn, email, age').get(keyRange)
objectStore.index('ssn, email, age').get(['444-44-4444', '[email protected]@company.com', 30])
objectStore.index('ssn, email, name').get(['444-44-4444', '[email protected]@company.com', 'Bill'])
Индексы могут быть упорядочены в любом порядке, но наиболее эффективны, если в первую очередь появляются самые конкретные.
В качестве альтернативы вы также можете использовать соединение с ключом. Для объединения ключей требуются четыре (одиночных) индекса. Четыре индекса занимают меньше места для хранения и более общие. Например, для следующего запроса требуется другой составной индекс
SELECT * FROM customers WHERE ssn = '444-44-4444' and name = 'Bill' and age = 30
Ключ к работе по-прежнему работает для этого запроса.