我对“IS NULL” MySQL 检查感到怀疑。我有这两个查询。第一个运行大约 300 秒。第二个跑不到1秒!
慢查询:
SELECT count(distinct(u.id))
FROM ips_usuario AS u
JOIN ips_fatura AS f
ON ((u.id = f.ips_usuario_id) OR
(u.ips_usuario_id_titular IS NOT NULL AND
u.ips_usuario_id_titular = f.ips_usuario_id));
快速查询:
SELECT count(distinct(u.id))
FROM ips_usuario AS u
JOIN ips_fatura AS f
ON ((u.id = f.ips_usuario_id) OR
(u.ips_usuario_id_titular = f.ips_usuario_id));
所有连接条件都使用外键索引列。表 ips_usuario 有大约 20.000 条记录,而表 ips_fatura 有大约 500.000 条记录。