2016-09-05 39 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树搜索(快速)以查找具有该值的所有行。但是如果它与其他东西一起被埋在一列中,你必须做一个表扫描(慢)来找到它们。 –