2017-09-14 68 views
1

我需要將未知數據類型保存到字段。因此,我不得不使用VARCHAR而不是整數(因爲數據也可以是一個字符串)mysql性能<, > for varchar vs整數

id, filter1, filter2 
1, male, 24 
2, female, 53 

在這種情況下,過濾器1是性別和過濾器2的年齡。如果我查詢有沒有很大的性能影響:

SELECT * FROM tbl WHERE filter2 > 30 

與使用整數相比?

+2

你的問題的開頭句子表明你沒有把足夠的思想放到你的應用程序中。 –

+0

這取決於很多可能因您而定的因素。最好的做法是簡單地自己測試一下。這並不困難。我在索引列上測試了900萬行MyISAM表,我發現varchar看起來有點慢,但沒有太多。 –

+0

@DanBracuk不幸的是,這是一個遺留系統,我不得不重新設計。這就是我發佈這個問題的原因。我目前正在審查數據庫設計 – Chris

回答

1

如果你寫:

where filter > 30 

那麼MySQL會做你想要什麼 - 但你可能會得到奇怪的結果。如果您有一個值爲'44x'的列,那麼它也會被篩選器選中。爲什麼?因爲MySQL會將filter轉換爲字符串。另外,類型轉換通常排除使用索引。

如果使用字符串:

where filter > '30' 

那麼你不必字符串轉換問題,但你會得到所有以字母開頭的字符串。

換句話說,不要混合這樣的類型。值應該存儲在它們的本地類型中。您應該重新訪問您的數據模型 - 您可能需要一個名爲age的專欄(或更好的是,出生日期)。

+0

不幸的是,我不知道過濾器是什麼。客戶可以自己定義它們。所以我不知道這是一個字符串還是數字。我目前唯一的限制是最多有5個過濾器(即我的表格中有5列:filter1 ... filter5) – Chris