2

If I have 2 tables employee and department

1) to join data at the server side

SELECT * FROM employee CROSS JOIN department;

we use only one connection here to grab the data

2) to join data at client side we would grab the 2 tables and use 2 connections

SELECT * FROM employee;

and store it in an array and also

SELECT * FROM department;

and store it in another array and and merge the 2 arrays by programming at the client side using for example Javascript.

the second method may be more complex but the advantages is that you could store the employee table on one sever and the department table on another server by this you decrease the load on your own server and make the each client machine do its work

But I'm asking if I want to join 2000 table Which would be better in performance and faster: to do joins at the client side or at the server side?

4

2 回答 2

5

好问题(尽管标签不好,正如已经指出的那样)。

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

所以这是一个糊涂的答案:这完全取决于结果集的大小;你必须进行实验。

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

于 2013-05-13T21:50:48.513 回答
2

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

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

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

您是对的,在客户端进行连接允许您连接位于不同服务器上的表,但我会声称,如果您有有效的相关数据可以连接,它应该位于同一台服务器上。不仅支持连接,还支持参照完整性、事务等。

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

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

于 2013-05-13T21:45:13.057 回答