我有以下情况:
有一项服务,任何给定的时间可以同时调用同一个SP 1到40 - 50次。
当被叫时,SP表现良好(800ms至1s)。 随着通话次数的增加,时间越来越长。 存储过程在具有树状结构的4个表上运行,第一个表具有接近100万条记录,而第4层表接近9000万条。 SP的每次调用都在一个实体上运行,并且由同一时间调用的其他调用完全隔离,因为对同一实体的调用是顺序的。 性能下降的原因主要是由于IO和并发(锁定和东西)而不是处理器。 在某个时间点,我可以拥有1到2-300个为其调用SP的实体。(活动实体) 查询使用3-4个索引(在这些大表上)。 实体的寿命在1小时到3-4小时之间。
我想要做的是当一个新实体出现为该特定实体创建一系列过滤索引并强制SQL使用它们以最小化IO时。当实体丢弃时也会删除索引。
这是一项很多工作,我想先在这里问一下这是否值得。我的问题是我不知道过滤索引是如何更新的。问题是我会说600个索引(200个实体x 3个索引)。一个实体将在大约10秒后更新。我不知道这个索引的更新会给系统带来多大的压力。我不想为选择速度交换插入速度。我猜测sql足够聪明,所以如果实体更新,它的索引将会更新。索引相当小且可快速更新,但检查600个索引的过滤条件必须占用一些资源。