2011-07-18 58 views
1

我想知道這下索引varchar字段以下兩種操作更有效(他們發揮我更困難的查詢選項):比較字符串的長度相等

length(field) == 5 

field == "12345" 

首先它對我來說顯而易見,第一個子句如果更快。但是,作爲領域索引比較是相當快。但是長度呢?我猜索引不存儲有關字符串長度的信息...

+0

我不瞭解MySQL,但我認爲像Oracle這樣的一些數據庫允許基於函數的索引,比如字段的長度。 – FrustratedWithFormsDesigner

回答

2

第二個在索引varchar字段中效率更高。具體而言,限制標準(完全匹配)比限制長度的限制更多;更大的限制加速了選擇。

0

無論如何,長度比較更好。即使以任何方式對字符串進行散列和索引,它們的比較速度也不會比簡單整數比較快。即使長度不存儲(但我不相信),空循環while(s[i] != '\0');長度計算將更快然後逐字符循環比較。

+1

循環在O(n)中執行。哈希值的精確比較是O(1)。 –

+0

此外,char-by-char循環比較不是數據庫工作的方式。差遠了。 –

+0

@Paul Sonier當然,db並不是真正的char-by-char。但是,正如我所說的,實際上,長度也被存儲(!),並且在您每次需要時都不計算。 – RReverser