我有非常大的表(超过 1000 万行)和返回大量数据的查询。我需要让它跑得更快。所以我尝试添加覆盖索引(由 where 子句和 id 的值组成),但即使在索引提示 USE INDEX 之后仍然存在全表扫描。然后我在选择中剪切值(仅留下 id)并添加覆盖索引,但仍然存在全表扫描。如何避免全表扫描?我尝试为所有列创建覆盖索引并进行全索引扫描,但该解决方案比全表扫描更长。还有其他优化方法吗?我尝试了索引,尝试删除不存在(更改为 id not in),这一切都让时间变得更糟。我有 Table1.id、table1.UserId、Table2.Id 的索引。
select t.id, t.Date, t.Added , t.NewId, t.UserId, t.Lost
from Table1 t
where t.Added=0 and t.Lost=0
and not exists (select 1
from table2 n
where n.Id=t.id and n.userId=t.userId and n.Added=0 and n.Del=0);