我经常需要对没有正确索引的大型表运行查询。因此,我要求DBA创建此类索引。他要做的第一件事是查看表统计信息,并查看索引空间大小。
他经常告诉我找到替代解决方案,因为“索引已经大于表”。他认为索引必须小于数据,因为他告诉我“您见过书中的索引吗?它比书本小得多,这就是表索引应该的样子”。
我认为他的理念不正确,但是我不能挑战他,因为他是首席DBA,而我是一名开发人员。我觉得如果查询需要索引,则应该只创建索引,而不是查找只会使SP变得不可读和无法维护的“替代方法”。
我只选择必填列。问题是我按日期过滤,因此引擎必须进行表扫描以匹配列。该查询每天晚上运行一次,以收集统计信息,但是运行需要15分钟(我们有另一条严格的规则:任何过程都不应超过3分钟)。
DBA向我显示了索引统计信息。该表上大约有10个索引,其中只有6个被使用(统计数据显示零命中4个)。这是一个大型系统,有20多个开发人员参与。索引是出于任何原因而创建的,并且可能不再使用。
我们需要支持SQL Server 2008,因为这就是运行测试数据库的基础。但是客户都在2014年和2016年。