- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Azure SQL 数据库,到目前为止已证明非常成功。它已经使用了大约 20 个月,没有进行任何维护......但它已经处理了很多。有些表有数百万行,当查询已建立索引的列时,使用与其交互的 Web 应用程序时,查询响应时间是可以接受的。
但是,我读到了有关重建索引的相互矛盾的建议。
这家伙说这样做没有意义:http://beyondrelational.com/modules/2/blogs/76/posts/15290/index-fragmentation-in-sql-azure.aspx
我已经在一些存储几千行的较小表上运行了一些重建索引语句。一些碎片会下降约 1/2...然后如果我第二次运行它,它可能会下降约
这些重建大约需要 2-10 秒,具体取决于表的大小...
然后我在一个大约有 200 万行的表上运行了一个索引,该索引具有以下碎片:PK__tmp_ms_x__CDEC17C03A4CDB46 55.2335782060565PK__tmp_ms_x__CDEC17C03A4CDB46 0IX_this_is_my_fk_index 15.7538877620014
花了 33 分钟。
结果是PK__tmp_ms_x__CDEC17C03A4CDB46 0.01PK__tmp_ms_x__CDEC17C03A4CDB46 0IX_this_is_my_fk_index 0
问题:自从执行上述操作以来,查询速度并没有真正改变。这正常吗?
鉴于 SQL Azure 中有很多事情我无法控制,重建索引是否有意义?
顺便说一句:我不是、也从来不是 DBA……只是一名开发人员
最佳答案
如果索引确实被使用,重建索引就很重要。如果索引没有用于您正在运行的查询,那么您将看不到差异。如果只是轻微使用,那么运行统计数据时您会发现细微的差异。如果它被大量使用,大多数时候您应该会看到性能的良好提升。使用 Microsoft SQL 时需要注意的另一件事是索引碎片有时是无关紧要的。通常,当我选择是否重建索引时,我会查看页数和碎片。如果我正在运行查询并且遇到性能问题,并且我正在使用索引,并且该索引有超过 16000 个页面,并且该索引的碎片超过 50%,则需要重建它。如果表很小或者我可以使用在线选项,我将继续同时重建所有表..
特别是对于 Azure,我的观点是,如果您正在尝试提高性能,这仍然是一个很好的步骤,因为它非常简单,即使您无法确定结果。无论它是否是共享服务,是否可以控制硬件层,检查索引碎片和重建索引都是您可以访问的,那么为什么不利用它呢?
所以我想简短的答案是肯定的,在某些情况下。
我建议不要手动检查索引并重建它们,而是设置一个每晚或每周的作业,在数据库最不活跃时运行。让它遍历所有表并重建索引。如果您有很多表,您还可以给它设定一个运行时间,然后将其设置为“有状态”(您可以使用表来保留进度信息),以便它记住它停止的位置并在下一次计划运行时恢复。
关于sql - Azure SQL 数据库中的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33181121/
SQL、PL-SQL 和 T-SQL 之间有什么区别? 谁能解释一下这三者之间的区别,并提供每一个的相关使用场景? 最佳答案 SQL 是一种对集合进行操作的查询语言。 它或多或少是标准化的,几乎所有关
这个问题已经有答案了: What is the difference between SQL, PL-SQL and T-SQL? (6 个回答) 已关闭 9 年前。 我对 SQL 的了解足以完成我的
我在数据库中有一个 USER 表。该表有一个 RegistrationDate 列,该列有一个默认约束为 GETDATE()。 使用 LINQ 时,我没有为 RegistrationDate 列提供任
我有一个可能属于以下类型的字符串 string expected result 15-th-rp 15 15/12-rp 12 15-12-th
很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center . 9年前关闭
我有一个存储过程(称为 sprocGetArticles),它从文章表中返回文章列表。这个存储过程没有任何参数。 用户可以对每篇文章发表评论,我将这些评论存储在由文章 ID 链接的评论表中。 有什么方
我目前正在做一个 *cough*Oracle*cough* 数据库主题。讲师介绍embedded SQL作为让其他语言(例如 C、C++)与(Oracle)数据库交互的方式。 我自己做了一些数据库工作
SQL Server 中 SQL 语句的最大长度是多少?这个长度是否取决于 SQL Server 的版本? 例如,在 DECLARE @SQLStatement NVARCHAR(MAX) = N'S
这个问题已经有答案了: Simple way to transpose columns and rows in SQL? (9 个回答) 已关闭 8 年前。 CallType
预先感谢您对此提供的任何帮助。 假设我有一个查询,可以比较跨年的数据,从某个任意年份开始,永无止境(进入 future ),每年同一时期直到最后一个完整的月份(其特点是一月数据永远不会显示至 2 月
我在数据库中有一个 USER 表。该表有一个 RegistrationDate 列,该列的默认约束为 GETDATE()。 使用 LINQ 时,我没有为 RegistrationDate 列提供任何数
下面是我试图用来检查存储过程是否不存在然后创建过程的 sql。它会抛出一个错误:Incorrect syntax near the keyword 'PROCEDURE' IF NOT EXISTS
我有一个同事声称动态 SQL 在许多情况下比静态 SQL 执行得更快,所以我经常看到 DSQL 到处都是。除了明显的缺点,比如在运行之前无法检测到错误并且更难阅读,这是否准确?当我问他为什么一直使用
来自 lobodava 的动态 SQL 查询是: declare @sql nvarchar(4000) = N';with cteColumnts (ORDINAL_POSITION, CO
使用 SQL Server 中的存储过程执行动态 SQL 命令的现实优点和缺点是什么 EXEC (@SQL) 对比 EXEC SP_EXECUTESQL @SQL ? 最佳答案 sp_executes
我有这个有效的 SQL 查询: select sum(dbos.Points) as Points, dboseasons.Year from dbo.StatLines dbos i
我正在调试一些构建成功运行的 SQL 命令的代码。 然而,在查询结束时,查询结果似乎被写入了一个文本文件。 完整的查询如下 echo SELECT DATE,DATETABLE,DATE,APPDAT
我有一些创建表的 .sql 文件(MS SQL 数据库): 表_1.sql: IF OBJECT_ID (N'my_schema.table1', N'U') IS NOT NULL DROP TAB
我写了下面的 SQL 存储过程,它一直给我错误@pid = SELECT MAX(... 整个过程是: Alter PROCEDURE insert_partyco @pname varchar(20
我在 SQL Server 2005 中有包含两列 Fruit 和 Color 的表,如下所示 Fruit Colour Apple Red Orange
我是一名优秀的程序员,十分优秀!