哪个在性能客户端连接或服务器端连接方面更好

时间:2013-05-13 21:33:39

标签: mysql join nosql rdbms

如果我有2个表员工部门

1)在服务器端加入数据

SELECT * FROM employee CROSS JOIN department;

我们这里只使用一个连接来获取数据

2)要在客户端加入数据,我们将获取2个表并使用2个连接

SELECT * FROM employee;

并将其存储在数组中

SELECT * FROM department;

并将其存储在另一个数组中,并通过使用例如Javascript在客户端进行编程来合并2个数组。

第二种方法可能更复杂,但优点是您可以将员工表存储在一台服务器上,将部门表存储在另一台服务器上,这样可以减少您自己服务器上的负载并使每台客户机完成其工作

但是我问我是否想要加入2000表格哪个性能更好,速度更快:在客户端或服务器端进行加入?

2 个答案:

答案 0 :(得分:4)

好问题(虽然有不好的标签,正如已经指出的那样)。

如果在服务器上完成连接肯定会更快,但如果每个表只有1,000行,那么结果集将是1,000,000行,并且必须将这些行发送回客户端。如果您加入客户端,则只返回2,000行。根据您在客户端需要执行的操作,可能需要执行单独的查询以减少客户端和服务器之间的流量。然后,使用JavaScript加入这两个集合也不会很快。

所以这里是温和的回答:这一切都取决于结果集的大小;你必须进行实验。

请注意,此答案仅适用于CROSS JOIN。毫无疑问,所有其他连接类型最好在服务器上完成。

答案 1 :(得分:2)

在大多数情况下,在服务器端进行连接要好得多。

在客户端进行连接需要将所有数据从两个表传输到客户端,即使连接条件随后会从两个表中消除大部分行。你会为每个这样的查询浪费大量的网络带宽。

另请注意,服务器端的连接应该在性能上更好,因为它们可以使用索引来查找匹配的行。如果将数据存储在客户端的数组中,则无法获得索引查找的好处。您可以做的最好的事情是确保两个数组按其各自的连接列排序,然后您可以一次性完成连接。

你是正确的,在客户端进行连接允许你连接住在不同服务器上的表,但我会声称,如果你有相关的数据有效加入,它应该在同一台服务器上。不仅支持连接,还支持参照完整性,事务等。

PS:我不知道你为什么用mongodb和nosql标记你的问题。您的问题似乎与非关系数据库无关。

PPS:来自@EdGibbs的回答提醒我你提出了CROSS JOIN作为替代方案。使用CROSS JOIN应该是一件非常罕见的事情,在部门和员工的例子中可能不是你想要的。您希望使用联接来识别匹配,即属于特定部门的员工。