数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

1
“和”与“&”之间的区别
我试图了解逻辑运算的优先顺序,并具有以下代码: declare @T bit ='TRUE' declare @F bit ='False' print @T and @F 它返回错误为 关键字“和”附近的语法不正确。 我用“&”替换了“ and”,并且代码再次起作用。以前的代码为什么不起作用?我正在使用SQL Server。
13 sql-server  t-sql 

1
从GIN索引的TSVECTOR列获取部分匹配
我想通过查询获得结果: SELECT * FROM ( SELECT id, subject FROM mailboxes WHERE tsv @@ plainto_tsquery('avail') ) AS t1 ORDER by id DESC; 这可以正常工作并返回tsv包含的行Available。但是,如果我使用avai(放置lable),它什么也找不到。 所有查询都必须在字典中吗?我们不能只查询这些字母吗?我有一个包含电子邮件正文(内容)的数据库,我希望它随着每秒的增长而快速发展。目前我正在使用 ... WHERE content ~* 'letters`


1
是什么允许SQL Server用对象名称交换传递给系统过程的字符串
是什么导致将对象名称传递给系统存储过程合法sp_helptext呢? 什么机制将对象名称转换为字符串? 例如 -- works sp_helptext myproc sp_helptext [myproc] sp_helptext [dbo.myproc] -- and behaves the same as a string sp_helptext 'myproc' sp_helptext 'dbo.myproc' -- does not work sp_helptext dbo.myproc -- Msg 102, Level 15, State 1, Line 1 incorrect syntax near '.' -- an additional case that does not work. …

1
在Debian / Ubuntu上安装PgAdmin 4 [关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 3年前关闭。 PgAdmin 4 1.0刚刚发布,但是在Linux的下载页面上,只有指向yum安装程序的链接。 有人知道是否有计划创建deb安装程序吗?或者如果已经有一个?

1
对SQL Server 2016中包含SUBSTRING()的谓词的估计值的更改吗?
是否有任何有关SQL Server 2016更改的文档或研究,以了解如何估计包含SUBSTRING()或其他字符串函数的谓词的基数? 我要问的原因是我正在查看一个在兼容模式130下性能下降的查询,原因与与包含调用SUBSTRING()的WHERE子句匹配的行数估计值的更改有关。我已通过查询重写纠正了此问题,但我想知道是否有人知道SQL Server 2016中有关此区域更改的任何文档。 演示代码如下。在此测试用例中,估计值非常接近,但准确性取决于数据。 在测试用例中,在兼容级别120中,SQL Server似乎正在使用直方图进行估计,而在兼容级别130中,SQL Server似乎假定表中有固定的10%匹配。 CREATE DATABASE MyStringTestDB; GO USE MyStringTestDB; GO DROP TABLE IF EXISTS dbo.StringTest; CREATE TABLE dbo.StringTest ( [TheString] varchar(15) ); GO INSERT INTO dbo.StringTest VALUES ( 'Y5_CLV' ); INSERT INTO dbo.StringTest VALUES ( 'Y5_EG3' ); INSERT INTO dbo.StringTest VALUES ( 'ZY_NE' …

4
表中的NULL值自我比较
我总是对某些神秘的t-sql行为感到困惑,如下所示 -- Create table t and insert values. use tempdb CREATE TABLE dbo.t (a INT NULL); -- insert 3 values INSERT INTO dbo.t values (NULL),(0),(1); GO set ansi_nulls off -- purposely turn off, so we can allow NULL comparison, such as null = null go -- expect 3 rows returned …


7
有人知道这个工具叫什么吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 3年前关闭。 在我们尝试弄清楚Microsoft SQL Server 2012 Internals(2013,0735658560)封面上的红色内容是什么时,生产性工作已停止。我们认为这是某种外科手术或电动工具? 有什么想法吗?
13 sql-server 

3
SQL Server的8 KB数据页未使用512字节
我已经创建了下表: CREATE TABLE dbo.TestStructure ( id INT NOT NULL, filler1 CHAR(36) NOT NULL, filler2 CHAR(216) NOT NULL ); 然后创建一个聚集索引: CREATE CLUSTERED INDEX idx_cl_id ON dbo.TestStructure(id); 接下来,我为它填充30行,每个行的大小为256字节(基于表声明): DECLARE @i AS int = 0; WHILE @i < 30 BEGIN SET @i = @i + 1; INSERT INTO dbo.TestStructure (id, filler1, filler2) VALUES …

2
SELECT TOP 1会损害查询性能;有没有dba可访问的方法来克服这个问题?
在生产应用程序(C#与SQL Server 2014 Standard对话)中,下面是一个查询,如下所示。大多数情况下,它以毫秒为单位运行。但是有时(对于的某些值@Id)会变得很疯狂,并且需要一分钟左右的时间。这比应用程序超时时间长,因此该应用程序对用户而言将失败。 在“疯狂”的情况下,返回的结果集正确地为空,就像在许多但并非所有其他情况下一样。 幸运的是,这在生产和开发环境中都是可重现的。 开发人员说,从查询中删除“ TOP 1”,然后确保应用消耗了结果集的多余行,从而清除了性能问题。 查询计划程序建议不存在索引TOP 1。(在dev中)。 正在进行更改查询和修复应用程序。推出需要一段时间。 我的问题:在采用新查询的应用程序更改推出之前,是否有任何DBA可访问的方法来调整或调整生产SQL Server实例以克服此问题? SELECT TOP 1 subscription_id FROM subscription AS sub JOIN billing_info AS bi ON bi.billing_info_id = sub.billing_info_id JOIN person_group AS apg ON apg.person_id = bi.person_id JOIN pplan ON pplan.plan_id = sub.plan_id JOIN product ON product.product_id = [plan].product_id …

5
在SQL Server中,有一种方法可以确定传递给正在执行的存储过程的参数的值
确定执行存储过程的一种方法是使用“动态管理”方法,如下所示: SELECT sqlText.Text, req.* FROM sys.dm_exec_requests req OUTER APPLY sys.dm_exec_sql_text(req.sql_handle) AS sqltext 但是,这仅显示存储过程的create语句的文本。例如: CREATE PROCEDURE IMaProcedure @id int AS SELECT * FROM AllTheThings Where id = @id 理想情况下,我想查看正在运行的过程的参数是什么,从而导致该过程对于特定的有问题的参数集运行了这么长时间。 有没有办法做到这一点?(在此问题中, Aaron Bertrand提到了DBCC InputBuffer,但我认为这不适用于此问题。)

1
删除语句中未使用的聚集索引
我有一个SQL Server表定义如下 CREATE TABLE [dbo].[Production_Detail] ( [Id] [bigint] NOT NULL DEFAULT (NEXT VALUE FOR [dbo].[Production_Detail_Seq]), [Meta_Data_ID] INT NOT NULL , [Production_Detail_Time] DATETIME NOT NULL, [Production_Detail_Time_Local] DATETIME NOT NULL, [Production_Detail_Value] FLOAT NULL, [IntegratedDM] BIT NOT NULL DEFAULT 0, [DailyIntegratedDM] BIT NOT NULL DEFAULT 0, [InsertedDate] DateTime NOT NULL, [ModifiedDate] DateTime NOT …

2
使用来自组的先前填充日期的数据值填写缺少的日期
绘制在部门之间转移的服务台票证。我们想知道开票当天每一天的部门是什么。该表包含每个票证在其打开的每一天的最后一个部门,该部门发生更改(包括最初打开票证的日期和关闭票证的日期的行)。数据表如下所示: CREATE TABLE TicketAssigment ( TicketId INT NOT NULL, AssignedDate DATE NOT NULL, DepartmentId INT NOT NULL); 我需要的是使用每个DateId的前一个TicketAssigment行中的DepartmentId填写每个TicketId的所有缺失日期。 如果我有这样的TicketAssigment行: 1, '1/1/2016', 123 -- Opened 1, '1,4,2016', 456 -- Transferred and closed 2, '1/1/2016', 25 -- Opened 2, '1/2/2016', 52 -- Transferred 2, '1/4/2016', 25 -- Transferred and closed 我想要这个输出: 1, …

1
在必须更新行时,数据库会进行删除还是插入?
因此,今天一位教授告诉我们,当数据库必须在内部(低级)进行更新时,它将进行删除,然后使用已更新的字段进行插入。然后他说这是在所有数据库中完成的,然后我开始讨论,告诉我认为这没有意义,但我没有足够的资源来支持我的职位。他似乎知道很多,但我不明白为什么数据库管理员会这样做。 我的意思是,我知道,如果您更新一个字段并且该行需要更多空间,那么它可能会物理删除该行并将其放在新数据的末尾。但是,例如,如果您减少了使用的空间,为什么要删除它并在最后插入它呢? 这是真的吗?有什么好处?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.