我有一个如下查询,其中 table150k 有 150k 条记录,而 table3m 有 3m 条记录。在我们的生产服务器上,我们必须非常频繁地一次针对一条记录运行此查询。这会消耗大量的 CPU 功率。
select t.id, t1.field1 as f1, t2.field1 as f2, t3.field1 as f3, ..., t12.field1 as f12
from table150k t
inner join table3m t1 on t1.fk = t.id and t1.[type] = 1
inner join table3m t2 on t2.fk = t.id and t2.[type] = 2
inner join table3m t3 on t3.fk = t.id and t3.[type] = 3
...
inner join table3m t12 on t12.fk = t.id and t12.[type] = 12
where t.id = @id
当我从此查询中删除内部联接时,它工作正常。当它们被包含在内时,我们的服务器会受到 CPU 的影响。
我应该如何优化这个查询、数据结构或场景,以使频繁获取数据的 CPU 成本不那么高?