1
我想爲我的項目使用MySQL設計一個標籤式結構。將標籤保存爲MySQL中的一個位域。有索引?
看完這個http://forge.mysql.com/wiki/TagSchema之後,我感到非常失望,因爲m2m表格設計需要這麼多join
性能肯定會吸引大量數據。
我心目中是一個標籤表,每個標籤具有name
和id
然後在項目表我要標記,每個項目都有一個名爲tag
列,每個標籤標誌着其位指數1,否則位字段的值爲0
例如
table: tag
id name
1 tag1
2 tag2
3 tag3
table: item
id name tag (in binary) tag (in array)
1 item1 00000001 [tag1]
2 item2 00000100 [tag3]
3 item3 00000110 [tag2, tag3]
所以如果我想查找某些標籤的item
,我只需要&
的比納爾y標籤字段與想要的標籤id
。
我的設計是好主意還是壞主意?
我可以在標籤bitset字段上使用索引,以便加快查找速度嗎?
如果MySQL不能做#2,什麼是我的最佳選擇(除了的NoSQL)
提前感謝!
我不打算使用int或bitint,我打算使用二進制字段。您的設計不好,因爲對於每件商品平均3個標籤,如果商品表有1m行,則必須掃描3m行以獲取標籤ID,然後在標籤表中掃描實際標籤名稱。 – est 2012-07-27 01:39:04
不,我不需要掃描數百萬行,因爲每個外鍵都有一個自動分配給它的索引(而它沒有,我肯定會分配一個索引)。因此,如果任務是查找某個您知道id的項目的所有標籤,則MySQL需要按照「log(3m)」操作的順序查找該項目的所有標籤id和另一個「log」(不同標籤的數量)'來查找標籤名稱。如果你想使用'BINARY',MySQL將需要一個索引長度,所以你的模式仍然決定了不同標籤的最大數目。 – Simon 2012-07-27 08:57:47