我有一个带有4个表的mysql数据库,可以独立更新。在任何给定时间(bhMacAcct和sv),其中2个表将具有大约25k到35k的行。我必须加入每个表中的各个位。
这是我最终登陆的查询:
SELECT bhMacAcct.acct,pkg,sv.mac,sv.recData
FROM bhMacAcct,bhPkgAcct,sv
WHERE (bhMacAcct.acct = bhPkgAcct.acct) AND (bhMacAcct.mac = sv.mac);
使用此查询需要3-5分钟。可能有更简单的方法吗?这可以进一步优化速度吗?
答案 0 :(得分:2)
首先,始终使用正确的,明确的JOIN
语法并限定所有列名称:
SELECT ma.acct, pkg, sv.mac, sv.recData
FROM bhMacAcct ma JOIN
bhPkgAcct pa
ON ma.acct = pa.acct JOIN
sv
ON ma.mac = sv.mac;
对于此查询,请从用于连接的所有列开始索引。我建议:bhMacAcct(acct, mac)
,bhPkgAcct(acct)
和sv(mac, recData)
。我还会将pkg
放在适当的索引中,因此索引会覆盖查询。