【发布时间】:2020-07-05 01:23:43
【问题描述】:
我在查询中有很多链接表,假设以下表是必然会导致查询速度变慢的冲突。
这些是链接的 id
Tabla A: ventacompra(#id_ventacompra,id_factura, id_albaran)
Tabla B: factura(#id_factura,id_cliente)
Tabla C: albaran(#id_albaran,id_cliente)
Tabla D: cliente(#id_cliente)
查询
SELECT *
FROM ventacompra v
LEFT JOIN factura f ON v.id_factura = f.id_factura
LEFT JOIN albaran al ON v.id_albaran = al.id_albaran
LEFT JOIN cliente cl ON (cl.id_cliente = f.id_cliente OR cl.id_cliente = al.id_cliente)
此查询需要 3 秒才能执行,因为它有数千条记录。 如果我删除 OR "cl.id_cliente = al.id_cliente" 查询会从 3 秒变为 0.220 毫秒,但它会在表 albaran 中显示空客户端。
我不知道我是否可以进行某种类型的 Join,以便在 NULL 的情况下更改为另一个表或其他方式来加速查询。
____编辑____
这是新查询,现在时间是 300 毫秒。
CASE
WHEN clf.nombre IS NOT NULL THEN clf.nombre
WHEN cla.nombre IS NOT NULL THEN cla.nombre
END AS nombre
LEFT JOIN cliente clf ON (clf.id_cliente = f.id_cliente and transacion='venta')
LEFT JOIN cliente cla ON (cla.id_cliente = al.id_cliente and transacion ='venta')
【问题讨论】:
标签: mysql performance join