我一直想知道是否需要进行标准化。我主要关注的不是这些表的可读性和易用性,而是速度。以汽车桌为例。假设这个汽车表有超过10,000条记录。
我的问题是:做多次连接的时间代价是否值得更好地设计数据库系统?以及如何进行'%%'查询与连接之间的区别
-------------------------------------------------------------
|CarID |Car_Name | Car_Features |
-------------------------------------------------------------
|F31344 | Corolla | Sedan - Sun Roof Power Lock Manual 4WD |
-------------------------------------------------------------
并执行以下查询:
- 从汽车中选择Car_ID,Car_Name,Car_Features,其中Car_Features如'%4WD'%;
- 从Car中选择Car_Name,其中Car_Features如'%Manual Sun Roof%';
醇>
持续时间/获取时间相对较快。
采用标准化方法。
汽车
------------------------------------------
|Car_ID | Car_Name |Transmission|Features|
------------------------------------------
|F31344 | Corolla | M4WD | EX1 |
------------------------------------------
传送
---------------------------------
|ID | Drive | Manual |
--------------------------------
|M4WD | 4WD | 1 |
--------------------------------
Features
---------------------------------
|Features | Sun_Roof | Power_lock|
---------------------------------
|EX1 | 1 | 0 |
---------------------------------
现在我必须编写连接来完成同样的事情。除了在原始表中引入两个新表和两个查找列之外。
> 1.Select Car_ID,Car_Name,Drive From Cars inner join Transmission
> ON Cars.Transmission = Transmission.ID
> Where Drive = '4WD';
答案 0 :(得分:1)
规范化与性能无关,尽管在大多数情况下,性能的提高是正确规范化数据库的副作用。它主要是关于数据的完整性和一致性。
在非规范化方法中,您将无法正常维护(例如,一致地向所有汽车记录添加新的或更新现有功能)并查询您的数据(当您开始混合和匹配汽车功能时)。而你的第二个问题就是那个
的完美例证Select Car_Name from Cars where Car_Features like '%Manual Sun Roof%';
此查询不会返回任何内容。
这是 SQLFiddle 演示
推荐阅读: