AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-5586

Joshua's questions

Martin Hope
Joshua
Asked: 2023-06-08 07:53:00 +0800 CST

过滤后具有不同列的 DENSE_RANK

  • 7

我发现自己需要获取每个用户最近访问的 N 件事,并且我有一个所有访问的日志表。就像是

CREATE TABLE [AccessLog] ([UserId] UNIQUEIDENTIFIER, [ThingId] UNIQUEIDENTIFIER, [AccessDate] DATETIME)

所以我写了

SELECT [UserId], [ThingId], [SequenceNumber]
  FROM (SELECT [UserId], [ThingId], DENSE_RANK()
          OVER (PARTITION BY [UserId] ORDER BY [AccessDate] DESC) SequenceNumber
          FROM [AccessLog]
     ) [AccessLog]
 WHERE [SequenceNumber] < @N

这是行不通的,因为如果同一用户重复访问同一事物,我们将获得相同的[ThingId]备份 N 次,而不是[ThingIds]每个用户 N 次不同的备份。

我对如何实际操作感到困惑。表太大了,如果我必须再次像 2000 一样编写 N 立方连接(一次连接表本身以排除重复副本,第二次生成计数),那么吸取整个表会更快在应用程序代码中处理它。

这几乎就像我想要的

FOR EACH [UserId] IN (SELECT [UserId] IN [User])
    SELECT TOP (@N) [UserId], [ThingId]
      FROM [AccessLog]
     ORDER BY [AccessDate] DESC

但是这种性能也很糟糕,我最好再次将表格读入应用程序代码。

sql-server
  • 1 个回答
  • 47 Views
Martin Hope
Joshua
Asked: 2023-03-16 02:05:08 +0800 CST

在什么情况下 WITH(rowlock) 对视图不起作用?

  • 6

我们在客户站点上遇到锁堆积问题。通过组合使用工具,我们设法找到了根锁。它肯定在锁堆积时运行这个特定的 SQL 语句:

INSERT INTO #Gather
SELECT (columns omitted for brevity)
  FROM dbo.vScheduleInsuranceRuleViolations WITH(rowlock) OPTION (MAXDOP 1)

锁层次结构分析得出一个不可避免的结论:WITH (rowlock)在这里没有做任何有用的事情。

视图很长,正确地需要很长时间来评估。有几个调用者的不同之处仅在于过滤 WHERE 子句(大部分数据库或一些记录)和锁定/并发需求。在这个特定的调用者中,我们有最差的过滤器和最低的锁定需求(WITH (rowlock)within READ COMMITTED--READ UNCOMMITTED在这里不起作用)。

在我将视图定义复制并粘贴到调用方之前,我想知道为什么这在可能的情况下不起作用;因为我希望WITH (rowlock)适用于视图中读取的每个表。

sql-server
  • 1 个回答
  • 78 Views
Martin Hope
Joshua
Asked: 2020-11-18 08:48:42 +0800 CST

Varbinary 使用索引开始查询

  • 3

我有这个树状键(想想对象 OID——它非常相似)来在表中存储和索引,查询想要选择其中的子树。在 btree 上执行此操作的最直接方法是使用树路径作为单个键,并使用starts-with 操作使键下降以查找行块。

所以明显的表示是VARBINARY(n)*。我想不出一种方法来表达以 SQL Server 可以弄清楚使用其索引的方式开始。

下一个最明显的是VARCHAR使用二进制排序规则将数据打包并使用like操作;但是我发现它like @n + '%'永远不会使用索引,而只会使用like 'literal%. 添加WITH INDEX提示仍然会完整地扫描索引,因为 SQL 服务器不理解。我真的不想考虑如何在 SQL 中转义参数,以便构建一个EXEC. 这只是疯狂和等待发生的安全灾难。

在普通递归表中表达这一点并使用递归 SQL 进行查询是不可能的。递归查询将为数据库服务器供电。

我现在实际上有一长串long变量中的数据,并且可以选择我的序列化形式。正如我所说,自然形式是VARBINARY,它真的看起来像0x000000100004A010000000D0000A000。最常见的查询是“给我所有以0x000000100004A01”开头的形式,或者在自然模型中,是n值字符串中的第一个long值。我可以将它们写在表格中,a.b.c.d.e.f...但是单个数字很长,并且来自单击 GUI 上的内容。

粗略地说,我正在寻找一种合理的形式

CREATE TABLE Record (
   RecordId BIGINT NOT NULL IDENTITY(1,1),
   RecordedDate DATETIME NOT NULL,
   RecordClass CHAR(1) NOT NULL,
   UserId INT NOT NULL,
   ObjectId VARBINARY(384) NOT NULL,
   RecordValue NVARCHAR(100) NULL,
   OwnerId BIGINT NULL, -- Joins to another table
   SubOwnerId BIGINT NULL, -- and yet another table
   PRIMARY KEY (RecordId)
)
CREATE INDEX name ON Record(RecordedDate);
CREATE INDEX name ON Record(OwnerId);
CREATE INDEX name ON Record(SubOwnerId);
CREATE INDEX name ON Record(ObjectId);

做起始索引的最佳方法是什么?

*我已经计算出最大可能的 n 并且它小于 400

sql-server index
  • 3 个回答
  • 212 Views
Martin Hope
Joshua
Asked: 2020-02-26 14:38:41 +0800 CST

无法从一台机器连接到 SQL Server;“现有连接被远程主机强行关闭”

  • 0

使用 SSMS 版本 18 连接到 SQL Server (2008 R2 SP3 - KB 4057113) 会产生:

与服务器成功建立连接,但在登录过程中出现错误。(提供者:SSL 提供者,错误:0 - 现有连接被远程主机强行关闭。)(.Net SqlClient 数据提供者)


如需帮助,请单击: http: //go.microsoft.com/fwlink ?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=10054&LinkId=20476


错误号:10054 严重性:20 状态:0

服务器上启用了连接失败日志记录,但没有记录任何内容。请注意,寻求帮助链接已失效。我尝试过各种数据库应用程序。什么都没有通过。问题似乎出在服务器上,而不是工作站上,但其他工作站可以连接到服务器。该工作站还可以连接到其他服务器。

我有一个很好的猜测,这在某种程度上与 TLS 相关,因为这是上次的情况(服务器不支持 TLS 1.2 并且需要补丁)。不过这次我找不到问题。

sql-server-2008-r2 tls-1.2
  • 1 个回答
  • 1450 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve