【发布时间】:2019-03-26 22:01:04
【问题描述】:
JOIN 是从其他表中添加信息的正确方式(唯一方式吗?)?
例如 如果我有这些表:
员工
name | pay_table
--------------------
John | 1
Lisa | 2
支付
Id | Pay
---------------------
1 | 30000
2 | 50000
而且我需要一张表中的姓名和工资,最好的方法是这样写:
SELECT * FROM Employees
LEFT JOIN Pay
ON Pay.id = Employees.pay_table
?还是有更好的办法?
我之所以问是因为这通常看起来很慢,即使我在大表中只有一些此类关系。
【问题讨论】:
-
这是一个非常好的解决方案
-
但它是最好/最快的吗?
-
显示你的慢查询。 dba.stackexchange.com 是纯数据库问题的好站点。 Query Optimization、How MySQL uses indexes 是很好的起点。
-
在这种情况下这是一个奇怪的映射,因为它总是 1-1。一个正确索引的表,即
CREATE INDEX pay_table ON Employees (pay_table),并假设支付上的 Id 是主键(或至少是某种形式的索引)将很快得到结果。 -
@Strawberry 这是一个简化的表格。但是可能有 50 个人的薪水相同。有一张单独的桌子可以让我一次更改他们所有的工资。这是一个简单的用例。可能还存在更复杂的问题,例如每个 pay_table 是否有关于上次更改时间、谁、合同信息链接等的信息。
标签: mysql join relationship