小编J.D*_*.D.的帖子

SQL Server 2017 企业版与标准版?

我正在寻找一个很好的资源来细分 SQL Server 2017 企业版和标准版之间的功能差异?我想确保没有陷阱,否则我会错过任何真正有益于标准的东西。

我已经阅读了 Microsoft 的许可指南,但是它没有涵盖任何其他显着的功能差异吗?

“高级自适应查询处理”、“企业数据管理”和“高级安全”等模糊描述的功能差异是什么?

sql-server sql-server-2017

3
推荐指数
2
解决办法
2万
查看次数

在一对一关系中与父表具有相同的主键

将两张表建立为一对一的关系,我想考虑哪一个是更好的设计?父表(人员)的主键与子表(个人资料)的主键相同,还是为个人资料表构建另一个主键?

我认为在连接两个表时,表具有相同的主键是更好的选择,因为主键将是配置文件表上的聚集索引,因此它不会扫描整个表来获取匹配的

关系数据图

建表语句

sql-server primary-key

3
推荐指数
1
解决办法
1282
查看次数

在 MySQL 中对表中的多列建立索引

我对为表创建索引感到非常困惑。

假设一个表users有 5 列,id(主键)、name、email、创建日期和更新日期。

id | name | email | creation_date | update_date
Run Code Online (Sandbox Code Playgroud)

最初的问题是关于为所有列创建索引(多列索引)。这通常是个好主意吗?(显然对于列数较少的表)

我知道您可能会问这取决于查询,但让我们假设以下查询:

1. SELECT * FROM users where creation_date < 'A DATE'
2. SELECT id, email from users where name = 'SOME NAMES';
3. SELECT id, email from users where name = 'SOME NAMES' ORDER BY creation_date DESC;
4. SELECT id, email from users where name = 'SOME NAMES' AND creation_date >= 'SOME DATES' ORDER BY updated_date ASC;
Run Code Online (Sandbox Code Playgroud)

我打算避免的是为上面的每个查询创建多个索引。那么我们是否可以创建一个由所有列组成的多列索引来覆盖上面的所有查询呢?

网络中分散信息的下一个问题是关于索引中列的顺序。这与 WHERE 子句后面的参数相同吗?ORDER BY 怎么样?我们需要在多列索引中考虑这一点吗?

mysql index

3
推荐指数
1
解决办法
2453
查看次数

数据库图表的脚本创建

是否可以使用 T-SQL 编写数据库图表的创建脚本?

如果不是,当您使用数据库图表设计器保存/编辑图表时(它是使用 PowerShell 还是其他某种语言来保存和加载这些类型的对象),它在做什么?

我问是因为我希望自动创建数据库图表。我有一个我的开发人员编写的工具(在 C# 中),它根据它对我们供应商数据所做的一些 Web 服务调用的响应自动创建表及其外键关系。

sql-server t-sql database-diagrams

2
推荐指数
1
解决办法
374
查看次数

RID 查找与密钥查找之间的性能差异?

非聚集索引使用聚集索引的键定位行与该表没有聚集索引且非聚集索引通过 RID 定位行之间是否存在性能差异?

不同级别的碎片是否也会影响这种性能比较?(例如,在这两种情况下,表的碎片率为 0%、50%、100%。)

performance sql-server clustered-index nonclustered-index bookmark-lookup performance-tuning

2
推荐指数
1
解决办法
4698
查看次数

2
推荐指数
1
解决办法
1751
查看次数

AlwaysOn AG 辅助副本具有高重做队列大小和估计恢复时间且重做速率良好的原因是什么?

SQL14 是主服务器,SQL16 是辅助副本,它们使用同步提交可用性模式进行设置:

AlwaysOn AG 仪表板

截至昨天,数据似乎停止从主服务器同步到副本服务器。今天早上我们暂停了可用性数据库,然后恢复了它。当我现在看到新数据通过时,这似乎再次启动了同步,但仪表板中的重做队列大小和估计恢复时间仍然很大并且还在继续增长。

我可以检查/做些什么来解决这个问题?

附加信息:服务器版本:SQL Server 2016 Enterprise - SP1(在主服务器和辅助服务器上)

此外,我们有一些长时间运行的索引重新组织/重新构建作业在早上早些时候在主服务器上失败。(那是大约 4 小时前的事,但现在这是否仍然可能是导致此问题的潜在因素?)

我注意到辅助服务器上的以下服务器日志(从最旧到最新): SQL Server 错误日志 1

SQL Server 错误日志 2

SQL Server 错误日志 3

不知道里面有没有什么线索?

辅助节点上的 DBCC OPENTRAN 返回以下内容: 辅助数据库上的 DBCC OPENTRAN

扩展事件会话以跟踪辅助节点上的等待: 中学的扩展事件会话

replication sql-server availability-groups data-synchronization sql-server-2016

2
推荐指数
1
解决办法
3434
查看次数

有多大的表或索引中有多少数据页值得考虑运行索引重建或索引重组操作?

在用于重新组织和重建索引的联机丛书中,Microsoft 提到:

重建或重组小型行存储索引通常不会减少碎片。

在值得考虑索引重组或索引重建操作的地方的截止点附近考虑了多少行数或数据页数?

index sql-server index-tuning fragmentation sql-server-2016

2
推荐指数
1
解决办法
240
查看次数

是否可以在行存储索引后面公开 B 树的最大深度,或者查看特定查询遍历了多少个节点的方法?

我个人对数据结构很感兴趣,并且知道行存储索引存储在它们后面的 B 树,我总是很好奇尝试可视化那些 B 树对于给定表/索引的样子。

有没有办法通过执行计划、统计信息、运算符属性、索引/表属性等关联或公开给定行存储索引的 B 树中的节点数?

此外,我可以做同样的事情来确定特定查询遍历的节点数吗?

如果有一种方法也可以确定 B 树中的叶节点数,则加分。

index tree sql-server btree sql-server-2016

2
推荐指数
1
解决办法
35
查看次数

为什么添加 WHERE 子句会破坏我的工作查询,并出现错误“由于定义的提示,查询处理器无法生成查询计划...”?

我有以下(愚蠢地简化的)查询,它利用两个引用同一个表的 CTE 并将它们相互连接:

WITH CTE1 AS
(
    SELECT dbo.RemoveNonNumericCharacters(PhoneNumber) AS PhoneNumberCleaned
    FROM PhoneNumbersTable
    GROUP BY dbo.RemoveNonNumericCharacters(PhoneNumber)
),
CTE2 AS
(
    SELECT CTE1.PhoneNumberCleaned
    FROM CTE1
    INNER HASH JOIN PhoneNumbersTable
        ON CTE1.PhoneNumbersCleaned = dbo.RemoveNonNumericCharacters(PhoneNumbersTable.PhoneNumber)
    WHERE PhoneNumbersTable.AreaCode IN (718, 212)
)

SELECT PhoneNumberCleaned
FROM CTE2
Run Code Online (Sandbox Code Playgroud)

注意HASH JOIN里面发生的事情CTE2。到目前为止,这一切都运作良好。

如果我将以下WHERE子句添加到最终SELECT查询中,那么我的整个查询现在变为:

WITH CTE1 AS
(
    SELECT dbo.RemoveNonNumericCharacters(PhoneNumber) AS PhoneNumberCleaned
    FROM PhoneNumbersTable
    GROUP BY dbo.RemoveNonNumericCharacters(PhoneNumber)
),
CTE2 AS
(
    SELECT CTE1.PhoneNumberCleaned
    FROM CTE1
    INNER HASH JOIN PhoneNumbersTable
        ON CTE1.PhoneNumbersCleaned …
Run Code Online (Sandbox Code Playgroud)

sql-server hints execution-plan errors sql-server-2016

2
推荐指数
1
解决办法
866
查看次数