我有两张table,一张叫“Shots”,有9M行,另一张叫“holes”,有50k行。我的数据库管理系统是SQLite。
目标是用从holes返回的值替换shot中x
、y
、z
的零值。我有以下一整天都在运行的查询:
UPDATE shots
SET x = h.hole_x,
y = h.hole_y,
z = h.hole_z
FROM holes h
LEFT OUTER JOIN shots s
ON h.tournament = s.tournament
AND h.course = s.course
AND h.year = s.year
AND h.round = s.round
AND h.hole = s.hole
WHERE s.end = 'hole'
AND s.x = '0.0'
AND s.y ='0.0'
AND s.z = '0.0'
AND h.hole_x != '0.0'
AND h.hole_y != '0.0'
AND h.hole_z != '0.0'
我读到了here,Subquery
可能比JOIN
快260倍。我如何重写我的查询以使其变得更快?
1条答案
按热度按时间mmvthczy1#
这里的主要问题是,您正在对
holes
进行不必要的联接,您必须将其删除。以下是SQLite中类似联接的
UPDATE
语句的正确语法:另外,为什么要将其与
'0.0'
进行比较?如果列hole_?
是数字,则应该将它们与0.0
或仅与0
进行比较。