我有一个大表的简单查询的查询:加快,其中条件之一不满足
UPDATE a
SET a.xyz = b.xyz
FROM b
WHERE a.xyz IS NULL AND b.id=a.id
a.xyz的所有现在不为NULL。但是,查询需要几乎与执行所有a.xyz为NULL时一样长的时间(5分钟)。
下获取不到一秒钟
UPDATE a
SET a.xyz = 1
WHERE a.xyz IS NULL
所以执行,我想知道如果有一种方法,当大多数a.xyz的非NULL
附注:加快第一查询澄清:是的,a.xyz,b.xyz,a.id,b.id上的索引存在
P.S.2。在(a.xyz,a.id)上添加复合索引并在a.xyz的WHERE a.xyz IS NULL上添加索引后,时间降至83秒。但是由于没有记录需要更新,所以必须有一种方法将其降低到不到一秒,并且SELECT COUNT(*)FROM WHERE a.xyz IS NULL在不到一秒钟内执行
P.S.3。解决了。问题在于另一个触发器无意中触发了更新。在(a.xyz,a.id)和a.xyz WHERE a.xyz IS NULL additing指标综合指数似乎已经解决了速度问题的其余
你已经尝试过穿上'a.xyz'的指数? https://dev.mysql.com/doc/refman/5.7/en/mysql-indexes.html – Andy
'a.id'和'b.id'这两个主键(或者至少是:唯一的)? – joop
尝试使用索引,例如“在xyz为空的(id)上创建索引;”哦,我看到Clodoaldo已经提到过。 –