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))。

mediatable效率稍低,因为记录较大:类型信息存储在每一行上。这导致相应的 table 有更多的数据页,这种效果只有在您开始拥有数百万条记录时才重要。

平衡这一点的是将内容存储在单个 table 中的(潜在)优势。如果您有可以是图像或视频的外键关系,那么单个 MediaId 可以用于该关系。如果您有结合这两者的查询(一个用户有多少 "media"?),那么将它们放在同一个 table 中是一个优势。如果它们具有其他共同属性(例如创建时间、字节大小、格式等),则将它们放在一起 table 提供了一个参考点。

换句话说,性能差异可以忽略不计。数据模型应基于您的应用程序的实体描述。

正如@GordonLinoff 所说,你应该更好地照顾你的数据模型;并且一定要有索引。

只有当您有 数百万 条记录时,才应考虑此类优化。

补充说明:如果您有两个单独的表,那么理论上您可以将它们放入单独磁盘上的两个单独的表空间中。因此,服务器可以并行地从两个表中获取数据,从而提高速度。