通过反复试验,我发现我的数据库上的表上的索引严重影响了查询的性能。
使用索引:执行时间30秒
没有索引:执行时间<1秒
这是我第一次看到类似的东西,无论如何索引都有意义,因为它是外键上的非唯一非聚集索引。
该表与我描述的in this post相同(感谢我能够创建FK)。下一步是创建索引:
CREATE NONCLUSTERED INDEX [IX_RDATA_COMBO_VALUES] ON [dbo].[RDATA_COMBO_VALUES]
(
[ID_REFERENCES] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO
当此索引存在时,查询变得非常慢,因为我删除它时查询速度很快。查询中的慢速连接是关于此表中的VALUE
字段而不是索引中的关键字段(ID_REFERENCES
),这就是我不理解的原因。
我怀疑SQL服务器的内部工作原理。
这可能是发生这种情况的原因?
我还注意到,如果我为每个表字段创建一个索引,那么查询会再次变快(这是我尝试通过&#34执行的操作;试验和错误&#34;)。感谢。
答案 0 :(得分:1)
添加索引是而不是一种神奇的药水,它会自动使您的查询运行得更快。根据您的问题,并基于您进行大量试验和错误的事实,似乎在索引方面的更多知识将为您带来很长的路要走。
查看执行计划并查看您的查询在后台实际执行的操作将有助于您理解为什么索引会搞砸了。
这是一个免费的视频,来自世界级的DBA,Brent Ozar(网站是brentozar.com),它解释了索引和SQL Server性能的基础知识。
这里是链接:https://www.brentozar.com/archive/2016/10/think-like-engine-class-now-free-open-source/