如何优化此查询以更快地获得结果?
update TblPartes inner join (select TP.codigo1, COUNT(TE.id_codigo) AS COUNT FROM TblPartes TP left JOIN TblExistencias as TE ON TP.id=TE.id_codigo where TE.vendido = 0 or TE.vendido is null or TE.vendido = 0 and TP.id_ubicacion is null or TE.vendido is null and TP.id_ubicacion is null GROUP BY TP.id ) as E on TblPartes.codigo1=E.codigo1 set stock = E.count where TblPartes.codigo1=E.codigo1
问题归结为速度,对吗?
SELECT TP.codigo1, COUNT(TE.id_codigo) AS COUNT
FROM TblPartes TP
left JOIN TblExistencias as TE ON TP.id=TE.id_codigo
where TE.vendido = 0
or TE.vendido is null
or TE.vendido = 0
and TP.id_ubicacion is null
or TE.vendido is null
and TP.id_ubicacion is null
GROUP BY TP.id
建议:
0
与 NULL
。这样查询就不必同时测试两者。 (这可能需要更改数据以及数据的加载方式。)COUNT(x)
为x
时,NULL
避免计数;这就是你想要的吗?GROUP BY
变为 LEFT JOIN
来避免 EXISTS(SELECT ...)
(这可能是速度的一个重要因素)。UPDATE
正在测试 TblPartes.codigo1=E.codigo1
两次`。and
和 or
可能不会按照您期望的方式组合!请提供
SHOW CREATE TABLE
和EXPLAIN SELECT ...
这些索引可能有帮助:
TP: INDEX(id_ubicacion, id, codigo1)
TE: INDEX(vendido, id_codigo)