MySQL表的速度受其他表大小的影响?

时间:2012-07-27 21:07:12

标签: mysql sql database

在具有多个表的MySQL数据库中,是否受同一数据库中所有其他表大小影响的表上的查询运行时?

4 个答案:

答案 0 :(得分:2)

我只能想到其他表可能对查询产生的两种影响,假设这些表不参与查询,没有其他查询正在运行,并且没有链接表的约束或触发器。

第一个效果是在编译阶段。在此阶段,SQL解析器从元数据表中获取有关表和列的信息。数据库中的更多表和列可能会降低查询的编译速度。

另一个影响是页表和磁盘碎片。如果你有一个干净的系统并开始分配和填充页面,那么页面可能会填充磁盘上的连续页面(不保证,但可能)。在访问时,操作系统可能预先获取与所请求页面相邻的物理页面。在我描述的环境中,这个预取的数据可能会在查询中使用。

在具有多个表的数据库中,磁盘碎片的可能性要大得多。在这种情况下,预取的硬件页面不太可能用于查询中的相同表。这意味着它们不会被使用,因此需要额外的I / O请求来获取下一页。

我已经在磁盘碎片方面对此进行了描述,但页面本身也会发生类似情况。存储表的数据的物理页面可能不是连续的,具有类似的结果。

碎片可能是数据库的问题。事实上,无论数据库中的表数量多少,它都可能成为问题。但是更多具有更多插入/删除活动的表往往会增加碎片。然而,效果通常非常轻微,只有在某些极端情况下才会导致性能显着下降。

答案 1 :(得分:1)

拥有多个表(和数据)只需要一个硬盘空间。

处理速度取决于您执行的表优化和大小+查询,而不是整个数据库。

答案 2 :(得分:1)

查询运行时可能受各种服务器环境问题的影响,因此虽然有人可能会说数据库中的其他大表本身不会影响对不相关表的查询速度,但事实却是如此是那些表可能也被查询并消耗服务器资源。这当然会影响您的查询速度。

答案 3 :(得分:1)

如果该表(大表)与具有某种连接的另一个表相关(外键约束将是一个示例),那应该只是一个问题...否则您的表应该独立运行。也就是说,如果你有一个庞大的表来引起速度问题,你可能想找到其他解决方案来将一些数据重构为更小的子集。