我正試圖決定是否在過濾器查詢中使用name__iexact=name
或name=name.lower()
。什麼提供更好的表現?如果我將名稱始終保存爲小寫。在Django中提供了更好的性能:name__iexact = name或name = name.lower()?
如果有問題,字符串不會超過10個字符。
我正試圖決定是否在過濾器查詢中使用name__iexact=name
或name=name.lower()
。什麼提供更好的表現?如果我將名稱始終保存爲小寫。在Django中提供了更好的性能:name__iexact = name或name = name.lower()?
如果有問題,字符串不會超過10個字符。
做name = name.lower()會更好,因爲你只做一次小括號(或者因爲你提到你已經存儲了小寫字母,所以不需要),然後在數據庫中進行比較,得到相等結果
執行name__iexact = name會稍微慢一點,因爲ORM將執行「LIKE」而不是「=」,從而評估它是否匹配每行上的大寫或小寫。
是的,考慮到這個問題,並且實際評論我的問題讓我意識到這一點,但是既然你回答了它,你就會獲得勝利。 – igorgue 2011-05-23 05:38:08
除非你搞砸了你的數據庫,否則數據庫比代碼快。 – 2011-05-22 01:05:23
LIKE是否像WHERE ='查詢一樣執行?因爲'len(name)'總是小於或等於10,因此'string.lower()'是'O(n)',事實上'~O(10)'。 – igorgue 2011-05-22 01:33:05
@mu_is_too_short我並不擔心,這只是一種好奇心。 – igorgue 2011-05-22 01:34:18