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