问题标签 [sql-server-performance]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
16954 浏览

sql - 包含列的索引,有什么区别?

我从来没有真正理解这两个索引之间的区别,有人可以解释一下区别是什么(性能方面,索引结构在数据库中的样子,存储方面等)?

包含索引

“正常”指数

0 投票
1 回答
184 浏览

sql - SQL:在表中查找缺少的层次结构文件夹(路径)

我有一个包含文件夹路径的表。我需要找到层次结构中这些文件夹之间的所有“间隙”。我的意思是,如果表包含这 3 个文件夹:

我需要在层次结构中找到以下缺少的文件夹:

这张表包含超过250,000条记录的文件夹,所以我们寻求最有效的方法来这样做,否则脚本会卡住很长时间,我们没有时间。

评论:我没有所有文件夹的列表。我拥有的是“根”文件夹和“叶子”文件夹,我需要在层次结构中找到它们之间的“间隙”。

第二条评论:该表可以包含多个层次结构,我们需要在所有层次结构中找到“差距” 。就此而言,还有另外 2 个 int 列:“DirID”和“BaseDirID”。“DirID”列是我们表中的 id 列。“BaseDirID”包含层次结构中第一个文件夹的 ID。因此,来自同一层次结构的所有文件夹(路径)在此列中共享相同的值。示例数据例如:

示例样本数据

所以我们需要找到以下数据:

预期成绩

提前致谢。

0 投票
1 回答
479 浏览

sql-server - 大数据集和sql server

我有一些设备每秒将数据记录到表中。每个设备每秒将有 16 条记录,随着设备数量的增长,表将有数十亿条记录,现在我使用的是 sql server,有时是一个简单的记录count 查询本身需要几秒钟才能执行。

在某些情况下,我们需要的历史数据主要是每小时数据的平均值,因此我们每小时处理大量数据并将其转换为每小时数据,因此一个设备在一小时内只有 16 条记录,但现在需要获取一些时间范围内的所有记录并对其进行处理,因此我们需要访问大数据。

目前我使用 sql server,您能否建议一些替代方法或如何处理 sql server 或其他数据库中的大数据。

0 投票
2 回答
753 浏览

sql-server - SQL:其 WHERE 子句包含 CHARINDEX() 的内部联接 - 提高性能

我有两个表:A 和 B,每个表都包含字符串。当表A的字符串包含表B的字符串(B.stringColumn是A.stringColumn的子字符串)时,我需要找到表A和表B之间的所有匹配项。

我使用CHARINDEX()函数通过以下代码完成了它:

有没有更有效的方法来做到这一点?

该表可能包含大量数据,这就是我问这个问题的原因。

在此先感谢,努里尔

0 投票
1 回答
1059 浏览

sql-server - 将 sql server 2008r2 升级到 2016 性能问题

有没有人有从 SQL Server 2008R2 升级到 2016 的经验?

我们的系统在 2008R2 上运行良好,但升级到 2016 后,我们遇到了高 tempdb 争用。

我们看到 PAGELATCH_SH 上的大量阻塞等待 tempdb 对象。PLE 为 99.98%。MAXDOP 为 6(机器有 8 个核心/NUMA)。MAXDOP 阈值为 50。

随机查询的运行时间超过 30 秒,但是当我尝试从 SSMS 运行相同的查询时,它们会运行亚秒级,这验证了阻塞是问题所在。我们目前使用 16 个临时文件,今晚增加到 34 个。

我们今天发现 tempdb 日志的 io_stall_write_ms 超过 200,000 毫秒,我们今晚将其移至 SAN,但我不相信它解释了页面锁存器的长时间等待。

我的想法已经走到了尽头。有没有人有什么建议?

0 投票
2 回答
191 浏览

sql-server - 当 SQL Server 中的表具有较大的 nvarchar(例如 nvarchar(2000))时,当行存储在页面中时,是否存储了所有 4000 个字节?

我正在调整一个审计方案:https://weblogs.asp.net/jongalloway/adding-simple-trigger-based-auditing-to-your-sql-server-database要求创建这样的审计表:

我想确保为插入到Audit表中的每一行存储尽可能少的内容。就我而言,我可以缩短 , , 的宽度,因为我TableName知道这些东西的实际最大长度。我有一个特定的表,它有一个定义为 nvarchar(2000) 的特定列,所以如果我继续使用这种通用方法,我将需要使用 nvarchar(2000)和.PrimaryKeyFieldPrimaryKeyValueFieldNameOldValueNewValue

我想知道 SQL Server 关于页面中实际使用的存储空间的内部优化。当使用 long varchars 或 nvarchars 存储行时,是实际用于将行存储在页面中的完整定义长度,还是 SQL Server 仅存储实际使用的字节。例如,如果只Hello!存储在上面,那么这样一行在页面中实际占用OldValue多少字节?OldValue

0 投票
0 回答
623 浏览

sql-server - 删除语句不使用索引

我有一个具有以下架构的表...

每天晚上,都会针对该表运行一个删除查询...

表有

  1. Index2 (id) - 聚集的,位于 PRIMARY 上的唯一
  2. Index3 (id) - 位于 PRIMARY 上的非集群
  3. Index1 (id) - 位于 PRIMARY 上的非聚集、唯一的主键
  4. Index4 (Column7) - 位于 PRIMARY 上的非聚集
  5. Index5 (Column2, Column7, Column4, Column5) - 位于 PRIMARY 上的非聚集

该查询产生以下计划...

删除语句的执行计划

该语句导致高度并发表中的阻塞。阻塞会导致系统错误。

如果我重新创建“Object1_IX”以覆盖“Object1”字段,这仍然会发生。这张桌子有 6,568,449 行,每晚修剪约 200,000 行。

0 投票
1 回答
108 浏览

sql - SQL:在拆分层次结构中查找丢失的文件夹路径

我有一个包含文件夹路径的表。此表包含四列:DirIDBaseDirID和。 - 文件夹的 ID。 - 层次结构中第一个文件夹的 ID。因此,来自同一层次结构的所有文件夹(路径)在此列中共享相同的值。 - 文件夹的深度。 - 文件夹的路径。DirLevelDisplayPathDirIDBaseDirIDDirLevelDisplayPath

我需要找到层次结构中这些文件夹之间的所有“间隙”。

示例数据例如:

所以我们需要找到以下数据:

注释:

一个。这张表包含超过250,000条记录的文件夹,所以我们寻求最有效的方法,否则脚本会卡很久,我们没有时间。

湾。我没有所有文件夹的列表。我拥有的是“根”文件夹和“叶子”文件夹,我需要在层次结构中找到它们之间的“间隙”。

C。该表可以包含多个层次结构,我们需要在所有层次结构中找到“间隙”。

d。每个层次结构都可以拆分,正如您在示例数据中看到的那样,第一个层次结构从“A\B”文件夹拆分为两个文件夹路径:“A\B\C”和“A\B\F”。第二个层次结构从“U\V”文件夹拆分为两个文件夹路径:“U\V\W”和“U\V\M”。即使在层次结构分裂的这种情况下,我们也需要找到所有的“差距”。

e. sql server 版本为:SQL 2012 SP3。

这个问题是在以下链接中提出的问题的延续问题:SQL:在表中查找缺少的层次结构文件夹(路径) 我们的问题还包括以粗体显示的第 4 条评论。

我看到有一个名为“hierarchyid”的新列类型(从 sql server 2008 开始),我认为这可能对我们有所帮助 - https://docs.microsoft.com/en-us/sql/t-sql/ data-types/hierarchyid-data-type-method-reference 你怎么看?

提前致谢。

0 投票
2 回答
220 浏览

sql - 如何优化耗时过长的查询

在这个查询中,我在下面的查询中调用了一个函数“fnGetPoolWinner”2-3 次,我认为这会减慢它的性能或多个 case 语句是原因。

大约需要时间 00:01:39。

我已经尝试过在表中创建索引和创建公用表表达式然后使用该查询等选项,但没有找到任何解决方案来减少时间。

0 投票
1 回答
68 浏览

sql-server - 为什么我必须重建低于 Avg 的索引。碎片小于 1% 以获得性能?

为什么我必须重建低于 Avg 的索引。碎片小于 1% 以获得性能?

我有一张经常更新的表格,但是当我深入查看并检查平均值时。碎片化,使用到甚至小于 1%。当我重建该索引时,性能自动得到了提高。

我在单个查询中加入了超过 2 个表的表。

我想知道根据 MSDN,我们不应该对少于 1% 的索引包含表做任何事情,但是如果不重建我的查询并不能更快地给我结果。我还设置了 FillFactor= 75。