当我进入我当前(雇主的)公司时,设计了一个新的数据库模式,它将成为许多未来将要创建的工具的基础。凭借我有限的 SQL 知识,我认为该表设计得相当好。我唯一担心的是几乎每个表都有一个多部分主键。每个表至少有一个 CustomerId 和它自己的键。虽然这些确实是为某个记录定义的,但我觉得多个键(我们在这里说的是四倍)效率非常低。
今天,我在一个简单的重复查询中看到了一些难以想象的 CPU 使用率,该查询连接了两个表,从第一个表中选择一个字符串字段并将它们区分开来。
select distinct(f.FIELDNAME) as fieldName
from foo f
inner join bar b
on f.id = b.fId
where b.cId = @id;
检查执行计划(我不是 EP Hero)我注意到有三个主要的 CPU 点。不同的(如预期的那样)和两个寻求indeces。我个人认为索引搜索应该非常快,但它们每个都占用了 18% 的成本。这是正常的吗?是因为(四重)聚集索引吗?
--UPDATE--
该查询用于创建 Lucene 索引。这是一个一次性处理,大约每周发生一次(我知道这听起来很矛盾)。据我所知,我不能在这里重用任何结果。