SQL Concrete Vs Class Table 一种子类型的继承查询速度

SQL Concrete Vs Class Table Inheritance query speed on one subtype

我在具体和 Class Table 继承之间权衡(见下面的例子)。 Class Table 当然有很多好处,特别是对于我的场景,超级 table 列保证在整个数据集中保持一致。但是我几乎不需要一次查询每个 subclass,而是所有查询一次都在一个 subclass 上(其中至少有 9 个 subclasses ).

因此,我的行数看起来会非常大,查询一个具有较少行的具体 table 是否会更快,即: (按照下面的例子)

SELECT property_address
FROM policies_property
ORDER BY date_issued DESC;

或者外键关系是否足够快,以至于查找非常大的超级 table 时的任何查询速度差异在 Class Table 继承中都可以忽略不计: (按照下面的例子)

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,每个类型都重复相同的列 table>

--// 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    |   
+------+---------------------+------------------+

ClassTable继承示例:一个超级class,多个子class。每个 subclass id 引用一个 superclass 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    |   
+------+------------------+

I have next to no need to query every subclass at once, instead all queries will be on one subclass at a time (of which there are at least 9 subclasses).

对我来说,这听起来是将它们分开的一个令人信服的理由。不要认为 'superclass' 方法是 'better normalized' 或 'more relational' 等。它们只是两种在理论上同样有效的设计选择;选择在实践中最有意义的那个。