我在MSDN杂志上阅读Ian Stirk的Uncover Hidden Data to Optimize Application Performance文章,现在我想知道表格索引创建是否可以自动化,就像Google AppEngine为其BigTable所做的那样。
有任何工具或Sql Server功能可以自动创建表索引吗?
答案 0 :(得分:3)
不,据我所知,SQL Server中没有启用自动表索引创建的功能。
我不认为这也是一个好主意,因为获得正确的索引将取决于多种因素,几乎没有任何因素可以真正实现自动化。
当然 - 您可以将主键放在任何名为“ID”的列上 - 直到您遇到需要其他内容的主键的情况....
当然,在子表中索引外键列是有意义的 - 但有时,INSERT的额外开销可以抵消索引的增益。
获得正确的索引太依赖于您的实际使用情况和许多动态的使用参数(以及您的设计决策),所以如果任何解决方案能够真正发挥作用,我会感到惊讶良好...
马克
答案 1 :(得分:3)
我不知道任何工具,创建索引的最佳方法是手动检查查询及其执行计划。我认为自动化工具不会像一些优秀的DBA和Profiler一起分析数据一样好。
但是,如果您想自己尝试一下,我建议您开始查看SQL Server中的性能视图。
从函数sys.dm_db_missing_index_columns
开始,它应该为您提供一些可以从索引中受益的列的提示。
sys.dm_db_index_usage_stats
可以显示哪些索引无用,或者也可以进行优化。
sys.dm_exec_cached_plans
,sys.dm_exec_query_plan
,sys.dm_exec_query_stats
和sys.dm_exec_sql_text
应该会向您显示已执行的查询及其执行方式,以及其他表中的信息,您可能会发现哪些需要更多的工作。
实际上,我模糊地回忆起一些可以帮助您分析Profiler中的性能的向导,可能不会自动分析,但可能会将其放入维护计划中。
答案 2 :(得分:2)
我很高兴你喜欢我的文章!
在我通过DMV(www.manning.com/stirk)关于SQL Server性能的新书中,在第10章中,您将看到一个允许您自动创建索引的脚本......还有一个脚本可以删除未使用的索引......你可以看到它们如何一起使用。
由于 伊恩
答案 3 :(得分:0)
我知道这是一个老线程,但我认为有人可能会觉得这很有趣:
http://blogs.msdn.com/b/queryoptteam/archive/2006/06/01/613516.aspx
尽管听起来很棒我注意谨慎 - 索引可能会使系统瘫痪,因为它们可以让它飞起来 - 只有在你知道自己在做什么的情况下才能使用!