Html 在indexedDB中,是否有可能将;其中(值1、值2……值2)中的列“;呼叫
我想使用indexedDB实现此搜索:Html 在indexedDB中,是否有可能将;其中(值1、值2……值2)中的列“;呼叫,html,indexeddb,Html,Indexeddb,我想使用indexedDB实现此搜索: where CustomerName in ('bob', 'fred'... 'nancy') 我可以看到两种可能性: 1) 只需在对象存储上打开游标,然后在整个表中循环,手动检查记录是否位于('bob','fred','nancy')) 2) 使用index,发出多个调用来索引openCursor('bob')、openCursor('fred') openCursor和openCursor都采用了一种似乎不允许搜索多个非连续值的方法 还有其他更有效
where CustomerName in ('bob', 'fred'... 'nancy')
我可以看到两种可能性:
1) 只需在对象存储上打开游标,然后在整个表中循环,手动检查记录是否位于('bob','fred','nancy'))
2) 使用index,发出多个调用来索引openCursor('bob')、openCursor('fred')
openCursor和openCursor都采用了一种似乎不允许搜索多个非连续值的方法
还有其他更有效的方法吗 最快的方法可能是对要搜索的键进行排序,在第一个键处打开一个光标,
IDBCursor。继续执行
,直到获得该键的所有值,然后再执行IDBCursor。前进到要搜索的下一个键。重复操作,直到完成所有键。这样,您只需一个光标即可获得所有值,但您可以快速跳过不关心的值。您的任何建议都有效
#1的性能改进是首先对键列表进行排序(例如,使用indexedDB.cmp()
实现比较功能),然后在第一个键上打开光标(例如“bob”)。然后,在迭代过程中,一旦看到“bob”之后“fred”之前的键,您就可以continue('fred')
跳过中间的记录。这样可以避免迭代表中您不关心的记录
最新的Chrome/Firefox/Safari还支持getAll(),这是#2上的一个变体,可以一次获取给定键的所有记录(例如,通过getAll('nancy')
),而不必迭代光标