MYSQL 个联合表

MYSQL FEDERATED tables

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

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

16.8.3 FEDERATED Storage Engine Notes and Tips

任何人都可以通过示例向我解释什么意思吗?

什么是 "query that cannot use any indexes"?

这意味着我在任何情况下都可以从远程服务器获取完整数据吗?

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

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

在极少数情况下,MySQL 的联合存储引擎是一个好主意。我避开了。