2011-05-22 60 views
1

我正試圖決定是否在過濾器查詢中使用name__iexact=namename=name.lower()。什麼提供更好的表現?如果我將名稱始終保存爲小寫。在Django中提供了更好的性能:name__iexact = name或name = name.lower()?

如果有問題,字符串不會超過10個字符。

+0

除非你搞砸了你的數據庫,否則數據庫比代碼快。 – 2011-05-22 01:05:23

+0

LIKE是否像WHERE ='查詢一樣執行?因爲'len(name)'總是小於或等於10,因此'string.lower()'是'O(n)',事實上'~O(10)'。 – igorgue 2011-05-22 01:33:05

+0

@mu_is_too_short我並不擔心,這只是一種好奇心。 – igorgue 2011-05-22 01:34:18

回答

2

做name = name.lower()會更好,因爲你只做一次小括號(或者因爲你提到你已經存儲了小寫字母,所以不需要),然後在數據庫中進行比較,得到相等結果

執行name__iexact = name會稍微慢一點,因爲ORM將執行「LIKE」而不是「=」,從而評估它是否匹配每行上的大寫或小寫。

+0

是的,考慮到這個問題,並且實際評論我的問題讓我意識到這一點,但是既然你回答了它,你就會獲得勝利。 – igorgue 2011-05-23 05:38:08

相關問題