2017-09-26 6 views
0

私はDexie.JSを使用してIndexedDBを処理しています。それが正常に機能しますが、大規模なデータベース上の糖蜜などの低速さIndexedDBクエリの最適化

return db.events.each((element) => { 
    let d = element.cause.data; 
    if (d.hasOwnProperty('deleted') && (false == d.deleted) && 
     d.hasOwnProperty('abbreviation') && 
     d.hasOwnProperty('contents') && (d.abbreviation == key)) { 
    snippet = d.contents; 
    } 
}).then(() => { 
    return snippet; 
}); 

: 現在、として書かれた愚かなクエリを持っています。 whereを適用してdb.eventsで作成したコレクションでそれぞれを実行する必要がありますか?パフォーマンスを向上させるでしょうか?文字列、数値、日付、TypedArrayまたはArrayは、次のようなクエリを最適化することができます:

まず、確認してくださいあなたの「キー」変数はインデックス可能型であると仮定した場合

はいあなた

+0

'(cause.data)'のようなさまざまな節で 'keyPath'を使って試してみました - 欠落しているインデックスに関する例外がありました。 –

答えて

1

ありがとうございました、そして、

db.version(2).stores({ 
    events: 'yourPrimaryKey, cause.data.abbreviation' 
}); 

このようなクエリを書き直す:db.eventsにインデックス "cause.data.abbreviation" を追加し

return db.events 
    // Let indexedDB sort out all items matching given key: 
    .where('cause.data.abbreviation').equals(key) 
    // Filter the rest manually using Collection.filter(): 
    .filter(element => { 
    let d = element.cause.data; 
    return (d.hasOwnProperty('deleted') && (false == d.deleted) && 
     d.hasOwnProperty('contents')); 
    }) 
    // Execute the query and only return the first match: 
    .first();