2012-02-21 36 views
1

我想找出一種方法來優化我的一些CoreData提取請求。我目前有NSPredicates有2或3個參數進行搜索。它們都被索引。CoreData獲取速度受NSPredicate中參數數量的影響?

是更快有一個單一的索引,我可以搜索或幾個我可以搜索?也是指數針對int的速度比表示一個字符串的索引?

回答

2

確實有幫助的是確保選擇最先區分的記錄。例如,如果只選擇兩個具有某個鍵值的記錄,如果90%的記錄處於活動狀態並且同時選擇其他內容,則選擇所有活動記錄的速度會更快(使用索引可用)。在這種情況下,您應該更好地刪除非歧視字段上的索引,以確保使用廢除字段上的索引。

另外,帶有或者語句的謂詞會比沒有語句的謂語慢很多。 在整數上選擇比在字符串上選擇要快,但如果兩者都被索引,則差異將會很小。

在關鍵路徑而不是關鍵點上選擇也會對性能產生負面影響。 (一個例子我最近使用,謂詞:

product.subgroup.code == %@ 

選擇來自150.000產品中的毛刺是正確的(0.1秒內),而:

product.subgroup.maingroup.code == %@ 

選擇來自150.000產品是正確的中大約1.5秒

在覈心數據中,你只能告訴一個屬性在數據模型編輯器中被編入索引,在真正的SQL數據庫中,你可以一次索引多個屬性,Afaik,沒有索引顧問可以用在覈心-data。

使用儀器中的真實數據庫進行測試(使用該儀器進行核心數據提取)可幫助您找到瓶頸,並可能是您遇到的最佳答案。

+0

我有一堆標記爲索引的屬性?那麼只有1真的被索引?這可能是我的問題的根源。 – Slee 2012-02-22 15:01:10

+0

他們分開索引,但優化器只能使用1個索引每fetchRequest – Bjinse 2012-02-22 20:22:19

+0

很棒的信息,謝謝 – Slee 2012-02-23 13:57:49

相關問題