标签: sql-server

在无需安装 SQL Server 的情况下为 SQL Azure 创建数据库图表的最佳方法是什么?

我在 SQL Azure 上有一个数据库,想为此创建一个数据库图表,但不想安装 SQL 服务器并复制数据库等。有什么方法可以做到这一点,有人知道吗?

sql-server azure-sql-database database-diagrams

11
推荐指数
1
解决办法
1万
查看次数

“签出”记录以进行处理的策略

我不确定是否有一个命名模式,或者是否没有,因为这是一个糟糕的主意。但我需要我的服务在主动/主动负载平衡环境中运行。这只是应用程序服务器。数据库将位于单独的服务器上。我有一个服务,需要为表中的每条记录运行一个过程。此过程可能需要一两分钟,并且每 n 分钟重复一次(可配置,通常为 15 分钟)。

有一个需要此处理的 1000 条记录表,以及针对同一数据集运行的两个服务,我希望每个服务“签出”要处理的记录。我需要确保一次只有一个服务/线程在处理每条记录。

我有同事过去使用过“锁表”。将一条记录写入此表以在逻辑上锁定另一个表中的记录(顺便说一句,该其他表非常静态,并且添加了非常偶然的新记录),然后删除以释放锁定。

我想知道如果新表有一个列指示它何时被锁定,并且它当前被锁定,而不是不断插入删除,是否会更好。

有没有人有这种事情的提示?是否存在长期(ish)期限逻辑锁定的既定模式?关于如何确保一次只有一项服务获取锁的任何提示?(我的同事使用 TABLOCKX 锁定整个表。)

sql-server sql-server-2008-r2 locking

11
推荐指数
1
解决办法
4179
查看次数

TSQL 为什么 Top 使用变量更快?

大家早,

我一直在研究一些中等复杂的 sql,以从第三方产品数据库“获取”一些数据,并将其显示在我们自己的内部应用程序中。

我添加了一个选择以从子查询中的表中获取顶部记录(如果这是有道理的)

查询用了将近 3 分钟才返回一个包含 100 条记录的最终结果集

SELECT TOP 1 ...
Run Code Online (Sandbox Code Playgroud)

我在网上查看了我试图实现的改进,有人建议我更改我的选择以使用变量,如下所示

DECLARE @topCount INT
SET @topCount = 1

SELECT TOP (@topCount) ...
Run Code Online (Sandbox Code Playgroud)

这将相同的查询从 3 分钟缩短到 1 秒,这太棒了!

但谁能解释为什么会这样。

sql-server t-sql

11
推荐指数
1
解决办法
2227
查看次数

没有 PARTITION BY 的 ROW_NUMBER() 仍然生成 Segment 迭代器

我正在撰写我即将发表的关于排名和聚合窗口函数的博客文章,特别是 Segment 和 Sequence Project 迭代器。我理解的方式是 Segment 标识流中构成组结束/开始的行,因此以下查询:

SELECT ROW_NUMBER() OVER (PARTITION BY someGroup ORDER BY someOrder)
Run Code Online (Sandbox Code Playgroud)

将使用 Segment 来判断一行何时属于前一行以外的不同组。然后 Sequence Project 迭代器根据 Segment 迭代器的输出进行实际的行号计算。

但是使用该逻辑的以下查询不应包含 Segment,因为没有分区表达式。

SELECT ROW_NUMBER() OVER (ORDER BY someGroup, someOrder)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这个假设时,这两个查询都使用了 Segment 运算符。唯一的区别是第二个查询不需要GroupBy在 Segment 上。这不是首先消除了对 Segment 的需求吗?

例子

CREATE TABLE dbo.someTable (
    someGroup   int NOT NULL,
    someOrder   int NOT NULL,
    someValue   numeric(8, 2) NOT NULL,
    PRIMARY KEY CLUSTERED (someGroup, someOrder)
);

--- Query 1:
SELECT ROW_NUMBER() OVER (PARTITION BY someGroup ORDER BY someOrder)
FROM …
Run Code Online (Sandbox Code Playgroud)

sql-server execution-plan

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

index_id < 256000 有什么意义?

在我读到的某个教程中,作者正在sys.indexes根据谓词进行过滤index_id < 256000。这有什么作用?

index sql-server metadata catalog-views

11
推荐指数
1
解决办法
1062
查看次数

如何允许执行存储过程但不允许写入?

我想在我的 SQL Server 2012 实例上设置一个“阅读”用户。我想让他有权执行任何存储过程、函数或直接 SQL 语句,这些语句从所有表和视图中检索数据,但不能更新或插入(即读取任何内容,不写入任何内容)。

我是否可以在不按名称专门授予每个函数或存储过程的权限的情况下进行设置,而是授予他对任何函数或存储过程的执行权,而只是剥夺修改表的权利?

如果我改为运行 SQL Server 2008,会有什么变化吗?

澄清和补充:

  1. 如果存储过程更改数据,用户应该收到错误消息(拒绝修改或完全拒绝访问存储过程)。
  2. 如果潜在的解决方案涉及拒绝权限,我可以不授予某些权限而不是拒绝吗?
  3. 是否可以在一个语句中对数据库中的所有表、视图等(现在和将来存在的)应用拒绝?

sql-server-2008 sql-server permissions sql-server-2012

11
推荐指数
1
解决办法
1万
查看次数

使用 SQL CLR 的安全或性能风险

在 SQL Server 中使用 CLR 是否存在任何特定的安全或性能风险?

performance security sql-server sql-clr

11
推荐指数
2
解决办法
7996
查看次数

了解统计数据、执行计划和“上升的关键问题”

我试图更好地理解(从概念上)统计、执行计划、存储过程执行之间的关系。

我说统计信息仅在为存储过程创建执行计划时使用,而在实际执行上下文中不使用,我说的对吗?换句话说,如果这是真的,一旦创建了计划(并假设它被正确重用),“最新”统计数据有多重要?

我读过的一篇文章(统计、行估计和升序日期列)特别激励我,该文章描述的场景与我每天面对的几个客户数据库非常相似。

在我们使用特定存储过程定期查询的最大表之一中,我们有一个升序日期/时间列。

当您每天添加十万行时,您如何防止执行计划变得陈旧?

如果我们经常更新统计信息来解决这个问题,在这个存储过程的查询中使用 OPTION (RECOMPILE) 提示是否有意义?

任何意见或建议将不胜感激。

更新:我使用的是 SQL Server 2012 (SP1)。

sql-server statistics execution-plan sql-server-2012

11
推荐指数
2
解决办法
3249
查看次数

我应该在什么时候拆分或分区一个非常大但简单的表

我们的网站有一些大而简单的(INT、INT、DATE)统计表。每个表最多有 300,000,000 行,而且每天都在变大。

托管服务提供商建议我们拆分或分区表,我在其他地方多次看到此建议。

然而...

我正在努力将这个建议与SQL Server规定的最大容量相协调——数据库大小为 524,272 TB,表行仅受“可用存储”的限制。

根据这些数字,上面描述的表格很容易有数百万计的行(10 的 303 次方)。

啊哈哈,你可能会说,能力和性能是有区别的。

几乎所有关于 SQL Server 性能的问题的答案都是“这取决于......取决于表设计和查询设计”。

这就是我问这个问题的原因。桌子的设计再简单不过了。基于索引 ID 字段的简单 count(*) 操作查询也不能。

performance sql-server

11
推荐指数
4
解决办法
6047
查看次数

查找导致缺少索引 DMV 的查询

如何找到导致建议创建特定索引的缺失索引 DMV 的查询?

谢谢你。

index sql-server-2008 sql-server sql-server-2008-r2 dmv

11
推荐指数
1
解决办法
5704
查看次数