逗人, 我运行相同的查询,它需要不同的执行时间如下: 查询是:
select * from table1 where userID = 2
它扫描非群集索引idx1,其中包含userID作为其密钥之一,因此我在5秒内得到结果。 但是当我再次使用userID = 5运行它时 它扫描非集群索引idx2,其中不包含userID作为其密钥之一,并在2小时后得到结果,我想它可能会读取整个表来查找userID = 5
这个问题的原因是什么? 也许userID = 5的值不在idx1叶子? 我认为NC索引中的叶级别存储了一系列值,查询在userID = 4和userID = 6时运行良好,因此userID = 5应该在叶级别中,
请咨询
答案 0 :(得分:0)
尝试使用索引提示
用于热修复
select * from table1 with(index(idx1) where userID = 5
长期解决方案
您可能需要更新表的统计信息或重建索引。 您可以关注此链接:Script for rebuilding and reindexing the fragmented index?
答案 1 :(得分:0)
首先更新该表索引的统计信息。 如果它不起作用并且您使用的是ASE15或+,则应更新列userID的统计信息。 ASE15优化器对统计数据比ASE12更敏感。