“FEDERATED表不支持通常意义上的索引;因为远程处理对表数据的访问,实际上是使用索引的远程表。这意味着对于不能使用任何索引的查询因此需要进行全表扫描,服务器从远程表中获取所有行并在本地过滤它们。无论此SELECT语句使用何种WHERE或LIMIT,都会发生这种情况;这些子句本地应用于返回的行。
无法使用索引的查询可能会导致性能下降和网络过载。另外,由于返回的行必须存储在内存中,这样的查询也可能导致本地服务器交换,甚至挂起。“
16.8.3 FEDERATED Storage Engine Notes and Tips
任何人都可以用例子解释我的意思吗?
什么是“无法使用任何索引的查询”?
这意味着我在任何情况下都可以从远程服务器获取完整数据?
答案 0 :(得分:0)
文档意味着如果对联合表运行查询,它会生成另一个针对远程基表运行的查询。如果在远程服务器上运行的查询无法使用索引,则会强制在远程服务器上进行表扫描,因此该表的所有行都将通过网络进行复制。
您可能认为查询应该在发送回来之前过滤远程服务器上的行,但似乎它不会这样做。只有在使用索引在远程端进行过滤时,它才能过滤远程服务器上的行。
极少数情况下,使用MySQL的联合存储引擎是个好主意。我避免它。