MySQL-同一表上的多个联接
我有下面给出的表foo1 foo1 以及包含Id、代码和名称的销售人员表 推销员 正如您在表foo1中看到的,有3列(SentSalesmanId、OrderedSalesmanId和ConfirmedSalesmanId)与销售人员表相关 这是我的问题MySQL-同一表上的多个联接,mysql,performance,Mysql,Performance,我有下面给出的表foo1 foo1 以及包含Id、代码和名称的销售人员表 推销员 正如您在表foo1中看到的,有3列(SentSalesmanId、OrderedSalesmanId和ConfirmedSalesmanId)与销售人员表相关 这是我的问题 SELECT f.Id, f.OrderId, f.OrderNote, s1.Code AS SentSalesmanCode, s2.Code AS OrderedSalesmanCode, s3.Code AS C
SELECT
f.Id,
f.OrderId,
f.OrderNote,
s1.Code AS SentSalesmanCode,
s2.Code AS OrderedSalesmanCode,
s3.Code AS ConfirmedSalesmanCode
FROM
foo1 f
INNER JOIN salesman s1 ON (s1.Id = f.SentSalesmanId)
INNER JOIN salesman s2 ON (s2.Id = f.OrderedSalesmanId)
INNER JOIN salesman s3 ON (s3.Id = f.ConfirmedSalesmanId);
这是我的预期输出
+----+---------+------------------+------------------+---------------------+-----------------------+
| Id | OrderId | OrderNote | SentSalesmanCode | OrderedSalesmanCode | ConfirmedSalesmanCode |
+----+---------+------------------+------------------+---------------------+-----------------------+
| 2 | 1 | important order! | S1001 | S1002 | S1003 |
+----+---------+------------------+------------------+---------------------+-----------------------+
这个查询给出了我想要的,但是对于大数据来说,它工作得很慢。我必须使用JOIN三次才能连接到销售人员表吗?我不能用一个连接来写它吗?或者有没有更有效的方法
谢谢。您的查询没有问题。这应该很快。如果速度变慢,您可能需要确保表的索引正确
SHOW INDEX FROM foo1
SHOW INDEX FROM salesman
如果你能把它们添加到你的问题中会很有帮助。然后,我们将为涉及的字段设置行和基数。查询没有问题吗?不带WHERE、ORDER BY的查询。请向我们展示整个查询。每次显示都会在您有时间时创建表名和表名中的每个显示索引,有人会给您一个或两个想法。您从未指定所需的输出。抱歉。问题已更新@tilz0r创建这三列的索引将有所帮助。尝试运行
EXPLAIN SELECT…
它将告诉您为什么速度慢。这是正确的连接方式。你有多少张唱片?@KemalGüler这没什么。。在这种情况下,当销售人员有许多记录时,可能会出现问题。尝试解释,然后尝试已有的查询,但作为子查询,父查询将只执行COUNT(*)。查询中可能没有问题,但在网络上可能没有问题。试着看一看percona工具包,这里有更多的分析工具。谢谢你的回答:)我仍然没有看到你表上的索引。请提供SHOW CREATE TABLE
。
+----+---------+------------------+------------------+---------------------+-----------------------+
| Id | OrderId | OrderNote | SentSalesmanCode | OrderedSalesmanCode | ConfirmedSalesmanCode |
+----+---------+------------------+------------------+---------------------+-----------------------+
| 2 | 1 | important order! | S1001 | S1002 | S1003 |
+----+---------+------------------+------------------+---------------------+-----------------------+
SHOW INDEX FROM foo1
SHOW INDEX FROM salesman