2016-09-05 41 views
0

假設我在RDBMS中有兩個表,它試圖根據不同的密鑰規範對相同數據的存儲和檢索進行建模。表1存儲在一個單一的字符列中的整個密鑰,表2存儲在多個列的鍵,例如:一列鍵或多列鍵?

表1:鍵=字符串,值=數據

表2:COL1 =字符串,COL2 =字符串,值=數據

表1鍵保存與col1和col2的組合相同的信息,以及潛在的分隔符,例如。 key =「NASDAQ/SUNW」,col1 =「NASDAQ」,col2 =「SUNW」

我對高效的數據檢索感興趣。使用Table1比Table2更有效嗎?

回答

2

如果您的密鑰包含多個值,則應將它們分隔爲不同的列。這樣,如果需要,你可以將它們分開索引,例如如果您需要能夠通過第二個值篩選結果集(在您的示例中,想象一下如果您需要使用SUNW查找所有記錄)。作爲一個經驗法則,如果您發現自己將逗號分隔的值放入單個數據庫列中,那麼您很可能做錯了某些事情。

+0

使用正則表達式查詢,例如「。* SUNW。*」,會更昂貴嗎? – andrewz

+0

是的。如果SUNW位於單獨的列中,則可以對列進行索引,然後執行B樹搜索(快速)以查找具有該值的所有行。但是如果它與其他東西一起被埋在一列中,你必須做一個表掃描(慢)來找到它們。 –