新手在這裏。更多的設計問題。所以我必須選擇以下存儲方法之一以獲得更好的性能(我傾向於多次檢查記錄的類型),同時處理Mysql數據庫中的大數據集。012)記錄(VARCHAR(11)),和值(INT(11))MySQL性能調優
eg: type="one", value= 12
2)合併列和值
eg: value="one_12"
哪種做法似乎更加可行之前預先考慮的類型?謝謝你的幫助。
新手在這裏。更多的設計問題。所以我必須選擇以下存儲方法之一以獲得更好的性能(我傾向於多次檢查記錄的類型),同時處理Mysql數據庫中的大數據集。012)記錄(VARCHAR(11)),和值(INT(11))MySQL性能調優
eg: type="one", value= 12
2)合併列和值
eg: value="one_12"
哪種做法似乎更加可行之前預先考慮的類型?謝謝你的幫助。
方法1更好,因爲您需要多次查詢記錄類型。 性能問題與方法2因爲每次你需要做字符串操作,從數據中提取記錄類型然後匹配
顯然,第一個變體。第二個殺死了數據結構和關係數據庫的想法。 從閱讀有關數據庫normalization開始。
我會推薦第一種方法。據推測,你會將類型存儲在事實表中並將其加入到原始數據中。如果是這樣,那麼代表較大的表存儲一個小的整數值並且(假設你在(value,type)上創建一個索引)連接到事實表將會非常有效和快速地需要更少的存儲空間。
換句話說,我建議像下面
數據表: ID,數據,數據越多,type_value
類型表: type_value,類型
指數類型表使用(type,type_value)上的複合(aka complex aka multicolumn)索引。然後您的加入可以利用覆蓋索引,例如,
SELECT a.*
FROM data AS A
INNER JOIN type AS b
ON a.type_value = b.type_value
WHERE b.type = ?
請注意,該命令在MySQL中的複合索引中很重要。因此,如果目標確實要評估WHERE b.type = "One"
(例如),您將需要索引(type,type_value),而不是相反。這可以讓你過濾你的類型表並應用索引中的id值,而不需要索引合併。
方法1比第二個更好。但是如果你有定義的類型列表,這裏是我的建議。
爲類型(int type_id,varchar類型)創建一個新表並索引類型varchar
列。在您的實際表中使用外鍵引用。這將是您的表格變大時處理的理想方式。
第二種方法違反了[原子性](http://en.wikipedia.org/wiki/First_normal_form#Atomicity)的原理,因此是1NF。 –