【发布时间】:2015-07-29 21:07:34
【问题描述】:
我了解了数据库引擎优化顾问以及它如何建议给定查询的索引。我的问题是创建索引时我可以完全依赖这些建议吗?
【问题讨论】:
标签: sql-server indexing
我了解了数据库引擎优化顾问以及它如何建议给定查询的索引。我的问题是创建索引时我可以完全依赖这些建议吗?
【问题讨论】:
标签: sql-server indexing
绝对不是。数据库引擎优化顾问的范围非常有限,只为特定工作负载推荐索引。但实际工作量可能会有所不同。
例如,DTA 会为特定查询推荐 index1。但是如果说该表是大量数据修改的目标,那么与维护index1 的开销和性能影响相比,index1 的好处非常小,因为来自更重要的工作负载的数据修改。 (这只是一个示例,但应该用于说明在索引中使用散弹枪方法如何给您带来麻烦)
将 DTA 的建议视为...建议。在实际生产等效工作负载中测试推荐索引的尽职调查是无可替代的。
【讨论】:
数据库调优顾问可以对调优特定查询或大量查询很有用。
但是
请注意,在表上添加一堆索引可以帮助提高一个查询的性能,同时损害另一个查询的性能。此外,一个表的索引越多,由于必须写入多个索引,写入所需的时间就越长。
如果您有特别长时间运行的查询,您可以参考优化顾问的建议(但在将它们扔到桌子上之前,请尝试了解它为什么建议它们)。
另一个(可能)不错的功能是提供一个跟踪文件供顾问解析。如果您能够获得“类似生产”的跟踪,那可能会为您提供有益的索引以投放到多个表上。通过“类似生产”,我的意思是如果您可以在很长一段时间内获得代表类似生产行为的跟踪。一种选择是跟踪生产(看看为什么这可能是个坏主意https://dba.stackexchange.com/questions/818/using-sql-profiler-on-a-database-thats-in-production)......但要小心,这可能会非常沉重。这是一个关于如何在不使用 UI 的情况下进行更小的足迹跟踪的教程:http://tranpeter.blogspot.com/2013/10/sql-server-proffer-offline.html
【讨论】: