Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:使用多个索引搜索indexeddb_Javascript_Indexeddb_Web Sql - Fatal编程技术网

Javascript:使用多个索引搜索indexeddb

Javascript:使用多个索引搜索indexeddb,javascript,indexeddb,web-sql,Javascript,Indexeddb,Web Sql,我想从WebSql改为Indexeddb。但是,SQL查询会是怎样的呢 SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com' SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com' and age = 30 SELECT * FROM customers WHERE s

我想从WebSql改为Indexeddb。但是,SQL查询会是怎样的呢

SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com'
SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com' and age = 30
SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com' and name = 'Bill'
etc
用IndexedDB? 例如,我在阅读indexedDb的时注意到,所有示例一次只查询一个索引。所以你可以

var index = objectStore.index("ssn");
index.get("444-44-4444").onsuccess = function(event) {
     alert("Name is " + event.target.result.name);
};
但是我需要同时查询多个索引


我还发现了一些关于的有趣帖子,但它们只有在查询复合索引中的所有字段时才起作用。

例如,复合索引仍然有效,但需要两个复合索引

 objectStore.createIndex('ssn, email, age', ['ssn', 'email', 'age']); // corrected
 objectStore.createIndex('ssn, email, name', ['ssn', 'email', 'name'])
然后像这样提问

 keyRange = IDBKeyRange.bound(
     ['444-44-4444', 'bill@bill@company.com'],
     ['444-44-4444', 'bill@bill@company.com', '']) 
 objectStore.index('ssn, email, age').get(keyRange)
 objectStore.index('ssn, email, age').get(['444-44-4444', 'bill@bill@company.com', 30])
 objectStore.index('ssn, email, name').get(['444-44-4444', 'bill@bill@company.com', 'Bill'])
索引可以按任何顺序排列,但如果首先是最具体的索引,则效率最高

或者,您也可以使用。键联接需要四个(单个)索引。四个索引占用更少的存储空间,更通用。例如,以下查询需要另一个复合索引

SELECT * FROM customers WHERE ssn = '444-44-4444' and name = 'Bill' and age = 30

键联接仍然适用于该查询

非常感谢!!但是,我仍然无法使用两个索引进行查询。我创建了一个[来演示这个问题!我还必须将您的objectStore.index参数更改为objectStore.index('ssn','email','age'),否则我会得到一个“DOM IDBDatabase Exception 8”异常。抱歉,我已将
索引
更正为
创建索引
。不应出现错误。但请注意,IE10不支持复合索引。好的,谢谢。因此,如果我想搜索任何字段组合,我必须为每个组合创建索引(“ssn”、“ssn”、“名称”、“ssn、电子邮件”、“ssn、名称、电子邮件”等)?一个索引有多贵?例如,如果我有一个包含20个索引的大型objectStore?如果你需要键范围查询,你必须索引。20个索引是合理的。但是,尽量避免爆发索引问题,这也不是直接相关的问题,可能值得注意的是,在使用变量以确保传递正确的类型时。如果有疑问,例如,使用parseInt()或类似的。可能重复的