首页 > 数据库 > SQL Server > 正文

SQL Server 自动重建出现碎片的索引

2024-08-31 00:55:43
字体:
来源:转载
供稿:网友
SQL Server 自动重建出现碎片的索引

1.索引碎片的产生?

由于在表里大量的插入、修改、删除操作而使索引页分裂。如果索引有了高的碎片,有两种情况,一种情况是扫描索引需要花费很多的时间,另一种情况是在查询的时候索引根本不使用索引,都会导致性能降低。

2.碎片类型分为:

2.1 内部破碎

由于索引页里的数据插入或修改操作而发生,以数据作为稀疏矩阵的形式的分布而结束,这将导致数据页的增加,从而增加查询时间。

2.2外部破碎

由于索引/数据页的数据插入或修改而发生,以页码分离和在文件系统里不连贯的新的索引页的分配而结束,数据库服务器不能利用预读操作的优点,因为:下一个相关联的数据页不临近,而且这些相关连的下面的页码可能在数据文件的任何地方。

自动重建发生碎片的索引

在数据中新建碎片整理存储过程

Sql代码
  1. --================================================
  2. --TEMPLATEGENERATEDFROMTEMPLATEEXPLORERUSING:
  3. --CREATEPROCEDURE(NEWMENU).SQL
  4. --
  5. --USETHESPECIFYVALUESFORTEMPLATEPARAMETERS
  6. --COMMAND(CTRL-SHIFT-M)TOFILLINTHEPARAMETER
  7. --VALUESBELOW.
  8. --
  9. --THISBLOCKOFCOMMENTSWILLNOTBEINCLUDEDIN
  10. --THEDEFINITIONOFTHEPROCEDURE.
  11. --================================================
  12. SETANSI_NULLSON
  13. GO
  14. SETQUOTED_IDENTIFIERON
  15. GO
  16. --=============================================
  17. --AUTHOR:<AUTHOR,,WUXIANGQIAN>
  18. --CREATEDATE:<CREATEDATE,2014-05-16>
  19. --DESCRipTION:<DESCRIPTION,重建出现碎片的索引>
  20. --=============================================
  21. ALTERPROCEDUREUSP_IMS_DEFRAGMENT_INDEXES
  22. AS
  23. --声明变量
  24. SETNOCOUNTON
  25. DECLARE@TABLENAMEVARCHAR(128)--表名称(已发生索引碎片)
  26. DECLARE@EXECSTRVARCHAR(255)--执行重建索引的语句
  27. DECLARE@INDEXNAMECHAR(255)--索引名称
  28. DECLARE@DBNAMESYSNAME--数据库名称
  29. DECLARE@DBNAMECHARVARCHAR(20)--数据库名称
  30. DECLARE@TABLEIDCHARVARCHAR(255)--表名称(用
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表