0

“一个 FEDERATED 表不支持通常意义上的索引;因为对表数据的访问是远程处理的,所以实际上是远程表使用了索引。这意味着,对于不能使用任何索引的查询,因此需要全表扫描,服务器从远程表中获取所有行并在本地过滤它们。无论此 SELECT 语句使用任何 WHERE 或 LIMIT ,都会发生这种情况;这些子句在本地应用于返回的行。

因此,未能使用索引的查询会导致性能不佳和网络过载。此外,由于返回的行必须存储在内存中,这样的查询也可能导致本地服务器交换,甚至挂起。”

16.8.3 联合存储引擎注意事项和提示

任何人都可以用例子解释我是什么意思吗?

什么是“不能使用任何索引的查询”?

这意味着我无论如何都可以从远程服务器获取完整数据?

4

1 回答 1

1

该文档的意思是说,如果您对联合表运行查询,它会生成另一个针对远程基表运行的查询。如果在远程服务器上运行的查询不能使用索引,这会强制在远程服务器上进行表扫描,因此该表的所有行都会通过网络复制。

您可能认为查询应该先过滤远程服务器上的行,然后再将它们发回,但它似乎没有这样做。只有当过滤可以在远程端使用索引完成时,它才能过滤远程服务器上的行。

很少有 MySQL 的联合存储引擎是一个好主意的情况。我避免它。

于 2017-03-11T21:01:15.197 回答