SQL具体与类表继承在一个子类型上的查询速度



我正在具体继承和类表继承之间权衡(参见下面的例子)。类表当然有很多好处,特别是在我的场景中,超级表列在整个数据集中保证了一致性。然而,我几乎不需要一次查询每个子类,相反,所有查询将一次对一个子类(其中至少有9个子类)。

因此,我的行数看起来会非常大,查询一个具有更少行的混凝土表会更快得多吗?(如下例所示)

SELECT property_address
FROM policies_property
ORDER BY date_issued DESC;
或者外键关系是否足够快,以至于在类表继承中查找非常大的超级表时,任何查询速度差异都可以忽略不计?(如下例所示)
SELECT property_address
FROM policies_property INNER JOIN policies_super ON policies_property.id = policies_super.id
ORDER BY policies_super.date_issued DESC;

一个具体继承的例子:每个类型都有一个完全独立的表,每个表中重复的公共列>

--// Table: policies_motor
+------+---------------------+----------------+
| id   | date_issued         | vehicle_reg_no |
+------+---------------------+----------------+
|    1 | 2010-08-20 12:00:00 | 01-A-04004     |
|    2 | 2010-08-20 13:00:00 | 02-B-01010     |
|    3 | 2010-08-20 15:00:00 | 03-C-02020     |
+------+---------------------+----------------+
--// Table: policies_property    
+------+---------------------+------------------+
| id   | date_issued         | property_address |
+------+---------------------+------------------+
|    1 | 2010-08-20 14:00:00 | Oxford Street    |   
+------+---------------------+------------------+

类表继承的一个例子:一个超类,多个子类。每个子类id引用一个超类id。

--// Table: policies_super
+------+---------------------+
| id   | date_issued         |
+------+---------------------+
|    1 | 2010-08-20 12:00:00 |
|    2 | 2010-08-20 13:00:00 |
|    3 | 2010-08-20 14:00:00 | 
|    4 | 2010-08-20 15:00:00 |
+------+---------------------+
--// Table: policies_motor
+------+----------------+
| id   | vehicle_reg_no |
+------+----------------+
|    1 | 01-A-04004     |
|    2 | 02-B-01010     |
|    4 | 03-C-02020     |
+------+----------------+
--// Table: policies_property    
+------+------------------+
| id   | property_address |
+------+------------------+
|    3 | Oxford Street    |   
+------+------------------+

我几乎不需要一次查询每个子类,而不是一次查询一个子类(其中至少有9个子类)。

对我来说,这听起来是一个让他们分开的令人信服的理由。不要认为"超类"方法是"更好的规范化"或"更相关"等。它们只是理论上同样有效的两种设计选择;选择在实践中最有意义的那个

相关内容

  • 没有找到相关文章

最新更新