优化SQL Server索引有哪些技巧?很多新手对此不是很清楚。为了帮助大家解决这个问题,下面小编就为大家详细讲解一下。需要的人可以从中学习,希望你能有所收获。
在本文中,我将解释如何使用SQL Server工具来优化数据库索引的使用,本文还涉及到索引的一般知识。关于索引的常识
索引是影响数据库性能的最大因素。由于这个问题的复杂性,我只能简单说一下,但目前有几本好书供大家参考。这里我只讨论两种SQL Server索引,即聚集索引和非聚集索引。在研究构建什么类型的索引时,应该考虑数据类型和保存数据的列。同样,您还必须考虑数据库可能使用的查询类型和最常用的查询类型。
索引的类型
如果该列包含高度相关的数据,并且经常按顺序访问,则最好使用聚集索引,因为如果使用聚集索引,SQL Server将按升序(默认)或降序物理地重新排列数据列,以便可以快速找到查询的数据。同样,如果搜索控制在一定范围内,最好对这些列使用聚集索引。这是因为由于数据的物理重排,每个表上只有一个聚集索引。
与上述情况相反,如果列中包含的数据相关性较差,则可以使用非托管索引。您可以在一个表中使用多达249个非聚集索引——,尽管我无法想象在实际应用中会使用这么多索引。
默认情况下,当表使用主键时,SQL Server将自动为包含该键的列创建唯一的群集索引。显然,为这些列建立唯一的索引意味着主键的唯一性。在建立外键关系时,如果您打算频繁使用它,那么在外键列上建立非聚集索引是一个很好的方法。如果表有聚集索引,它将使用链表来维护数据页之间的关系。相反,如果表没有聚集索引,SQL Server会将数据页保存在堆栈中。
数据页
当索引建立时,SQLServer建立一个数据页,这是一个加速搜索的指针。当建立索引时,设置其相应的填充因子。填充因子设置为指示索引中数据页的百分比。随着时间的推移,数据库的更新将消耗现有的可用空间,这将导致页面被拆分。页面拆分的结果是索引的性能降低,因此使用索引的查询将导致数据存储的碎片。建立索引时,设置了索引的填充因子,因此无法动态维护填充因子。为了更新数据页中的填充因子,我们可以停止旧索引,重建索引,重置填充因子(注意:这会影响当前数据库的运行,重要场合请谨慎使用)。DBCC索引碎片整理和DBCC索引碎片整理是清除聚集和非聚集索引碎片的两个命令。INDEXDEFRAG是一个联机操作(也就是说,它不阻止其他表操作,如查询),而DBREINDEX则物理重建索引。在大多数情况下,重建索引可以更好地消除碎片,但这种优势是以阻止索引所在表上当前发生的其他操作为代价的。当有一个大的片段索引时,INDEXDEFRAG将花费很长时间,因为该命令基于一个小的事务块。
填充因子
当您实现上述任何一种方法时,数据库引擎可以更有效地返回索引数据。fillfactor的主题超出了本文的范围,但我仍然提醒您,您需要注意将由fill factor索引的表。
执行查询时,SQL Server会动态选择要使用的索引。因此,SQL Server会根据每个索引中关键字的统计信息来决定使用哪个索引。值得注意的是,在日常数据库活动(如插入、删除和更新表)之后,SQL Server使用的这些统计信息可能已经“过期”,需要更新。您可以通过执行DBCC SHOWCONTIG来检查统计信息的状态。当您认为统计信息“过时”时,可以执行表的UPDATE STATISTICS命令,这样SQL Server就会刷新关于索引的信息。
建立数据库维护计划
SQL Server提供了一个工具来简化和自动维护数据库。这个名为数据库维护计划向导的工具也包括索引的优化。如果运行此向导,您将看到有关数据库中索引的统计信息,这些统计信息作为日志工作并定期更新,从而减少了手动重建索引造成的工作量。如果不想自动定期刷新索引统计,也可以选择在DMPW中重新组织数据和数据页,这样会停止旧的索引,根据特定的填充因子重新构建索引。
阅读以上内容对你有帮助吗?如果您想了解更多相关知识或阅读更多相关文章,请关注行业资讯频道,感谢您的支持。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/128952.html