我正在寻找一个很好的资源来细分 SQL Server 2017 企业版和标准版之间的功能差异?我想确保没有陷阱,否则我会错过任何真正有益于标准的东西。
我已经阅读了 Microsoft 的许可指南,但是它没有涵盖任何其他显着的功能差异吗?
“高级自适应查询处理”、“企业数据管理”和“高级安全”等模糊描述的功能差异是什么?
将两张表建立为一对一的关系,我想考虑哪一个是更好的设计?父表(人员)的主键与子表(个人资料)的主键相同,还是为个人资料表构建另一个主键?
我认为在连接两个表时,表具有相同的主键是更好的选择,因为主键将是配置文件表上的聚集索引,因此它不会扫描整个表来获取匹配的
我对为表创建索引感到非常困惑。
假设一个表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 怎么样?我们需要在多列索引中考虑这一点吗?
是否可以使用 T-SQL 编写数据库图表的创建脚本?
如果不是,当您使用数据库图表设计器保存/编辑图表时(它是使用 PowerShell 还是其他某种语言来保存和加载这些类型的对象),它在做什么?
我问是因为我希望自动创建数据库图表。我有一个我的开发人员编写的工具(在 C# 中),它根据它对我们供应商数据所做的一些 Web 服务调用的响应自动创建表及其外键关系。
非聚集索引使用聚集索引的键定位行与该表没有聚集索引且非聚集索引通过 RID 定位行之间是否存在性能差异?
不同级别的碎片是否也会影响这种性能比较?(例如,在这两种情况下,表的碎片率为 0%、50%、100%。)
performance sql-server clustered-index nonclustered-index bookmark-lookup performance-tuning
如果该表被重命名,表上的外键关系会发生什么变化?
SQL14 是主服务器,SQL16 是辅助副本,它们使用同步提交可用性模式进行设置:
截至昨天,数据似乎停止从主服务器同步到副本服务器。今天早上我们暂停了可用性数据库,然后恢复了它。当我现在看到新数据通过时,这似乎再次启动了同步,但仪表板中的重做队列大小和估计恢复时间仍然很大并且还在继续增长。
我可以检查/做些什么来解决这个问题?
附加信息:服务器版本:SQL Server 2016 Enterprise - SP1(在主服务器和辅助服务器上)
此外,我们有一些长时间运行的索引重新组织/重新构建作业在早上早些时候在主服务器上失败。(那是大约 4 小时前的事,但现在这是否仍然可能是导致此问题的潜在因素?)
不知道里面有没有什么线索?
replication sql-server availability-groups data-synchronization sql-server-2016
我个人对数据结构很感兴趣,并且知道行存储索引存储在它们后面的 B 树,我总是很好奇尝试可视化那些 B 树对于给定表/索引的样子。
有没有办法通过执行计划、统计信息、运算符属性、索引/表属性等关联或公开给定行存储索引的 B 树中的节点数?
此外,我可以做同样的事情来确定特定查询遍历的节点数吗?
如果有一种方法也可以确定 B 树中的叶节点数,则加分。
我有以下(愚蠢地简化的)查询,它利用两个引用同一个表的 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 ×9
index ×3
btree ×1
errors ×1
foreign-key ×1
hints ×1
index-tuning ×1
mysql ×1
performance ×1
primary-key ×1
replication ×1
t-sql ×1
table ×1
tree ×1