0

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

4

4 回答 4

2

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

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

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

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

我已经根据磁盘碎片描述了这一点,但是页面本身也会发生类似的事情。存储表数据的物理页可能不连续,结果相似。

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

于 2012-07-27T21:43:22.810 回答
1

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

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

于 2012-07-27T21:12:39.620 回答
1

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

于 2012-07-27T21:17:19.560 回答
1

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

于 2012-07-27T21:17:26.543 回答