SQL查询执行速度
SQL query execution speed
就 sql 中的执行速度而言,使用名称为 'image' 和 'video' 的 2 个不同 table 或 1 [=27] 是否更好? =] 名称 'media' 和名称 'type' 的列。
这 2 个查询的执行速度是否相同?
'SELECT * FROM image WHERE id=x';
'SELECT * FROM media WHERE id=x AND type="image"'
没什么区别。为了提高性能,您的 table 应该有一个索引(第一个是 image(id)
;第二个是 media(id, type)
)。
media
table效率稍低,因为记录较大:类型信息存储在每一行上。这导致相应的 table 有更多的数据页,这种效果只有在您开始拥有数百万条记录时才重要。
平衡这一点的是将内容存储在单个 table 中的(潜在)优势。如果您有可以是图像或视频的外键关系,那么单个 MediaId
可以用于该关系。如果您有结合这两者的查询(一个用户有多少 "media"?),那么将它们放在同一个 table 中是一个优势。如果它们具有其他共同属性(例如创建时间、字节大小、格式等),则将它们放在一起 table 提供了一个参考点。
换句话说,性能差异可以忽略不计。数据模型应基于您的应用程序的实体描述。
正如@GordonLinoff 所说,你应该更好地照顾你的数据模型;并且一定要有索引。
只有当您有 数百万 条记录时,才应考虑此类优化。
补充说明:如果您有两个单独的表,那么理论上您可以将它们放入单独磁盘上的两个单独的表空间中。因此,服务器可以并行地从两个表中获取数据,从而提高速度。
就 sql 中的执行速度而言,使用名称为 'image' 和 'video' 的 2 个不同 table 或 1 [=27] 是否更好? =] 名称 'media' 和名称 'type' 的列。
这 2 个查询的执行速度是否相同?
'SELECT * FROM image WHERE id=x';
'SELECT * FROM media WHERE id=x AND type="image"'
没什么区别。为了提高性能,您的 table 应该有一个索引(第一个是 image(id)
;第二个是 media(id, type)
)。
media
table效率稍低,因为记录较大:类型信息存储在每一行上。这导致相应的 table 有更多的数据页,这种效果只有在您开始拥有数百万条记录时才重要。
平衡这一点的是将内容存储在单个 table 中的(潜在)优势。如果您有可以是图像或视频的外键关系,那么单个 MediaId
可以用于该关系。如果您有结合这两者的查询(一个用户有多少 "media"?),那么将它们放在同一个 table 中是一个优势。如果它们具有其他共同属性(例如创建时间、字节大小、格式等),则将它们放在一起 table 提供了一个参考点。
换句话说,性能差异可以忽略不计。数据模型应基于您的应用程序的实体描述。
正如@GordonLinoff 所说,你应该更好地照顾你的数据模型;并且一定要有索引。
只有当您有 数百万 条记录时,才应考虑此类优化。
补充说明:如果您有两个单独的表,那么理论上您可以将它们放入单独磁盘上的两个单独的表空间中。因此,服务器可以并行地从两个表中获取数据,从而提高速度。