数据库管理员

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

4
如何更改SQL Server排序规则
如何更改整个服务器和特定数据库的SQL Server 2008 R2 Express默认排序规则? 有没有办法使用SQL Server Management Studio的可视界面来做到这一点?在“服务器属性”窗口(以及相应的“数据库属性”窗口中),此属性不可用于编辑。

3
pgAdmin 4版本3再次无法打开
我刚刚为macOS Sierra安装了pgAdmin 4版本3.0.0 ,替换了与在同一Mac上本地运行的Postgres 10.3 捆绑在一起的pgAdmin。 我打开了pgAdmin 4.app应用程序图标,这使Safari浏览器位于最前面,并带有一个显示通常pgAdmin用户界面的标签。好。 我在Safari中关闭了该标签。现在,当我打开pgAdmin 4.app图标(双击或选择File> Open)时,什么都没有发生。 pgAdmin是否应该在浏览器窗口而不是应用程序自己的窗口中启动? ➡如何再次重新打开pgAdmin?

4
从一台服务器复制(数百个)表到另一台服务器(使用SSMS)
我必须将几百张表(当前为466张,但仍在增长)从一台服务器复制到另一台服务器。 我以前从来没有做过此事,所以我完全不确定如何处理它。所有表格的格式相同:Cart<Eight character customer number> 这是一个较大的项目的一部分,我将所有这些Cart<Number>表合并到一个Carts表中,但这是一个完全不同的问题。 有没有人有我可以用来复制所有这些表的最佳实践方法?如果有帮助,两台服务器上的数据库名称相同。就像我之前说的,我拥有该sa帐户,因此我可以执行将数据从A传输到B所需的一切。两个服务器也都在同一个服务器场中。

2
什么是“部分匹配指数”?
我试图了解有关SQL Server 2016中引入的“外键引用检查”查询计划运算符的更多信息。那里没有很多有关它的信息。微软在这里宣布了它,我在这里发表了博客。通过从具有254个或更多传入外键引用的父表中删除一行,可以看到new运算符:dbfiddle link。 操作员详细信息中显示三种不同的计数: 外键引用计数是传入外键的数量。 没有匹配的索引计数是没有合适索引的传入外键的数量。验证更新或删除的表不会违反该约束将需要对子表进行扫描。 我不知道部分匹配索引计数代表什么。 在这种情况下,什么是部分匹配索引?我无法进行以下任何工作: 筛选索引 将外键列作为INCLUDE索引的列 使用外键列作为第二个键列的索引 多列外键的单列索引 创建多个覆盖索引以为多列外键启用“索引连接”计划 Dan Guzman指出,即使索引键的顺序与外键列的顺序不同,多个列的外键也可以匹配索引。他的代码是在这里,以防有人能够以它为起点来进一步了解部分匹配索引。

6
在整个数据库中更改GETDATE()的使用
我需要将本地SQL Server 2017数据库迁移到Azure SQL数据库,并且由于要克服很多限制,因此我面临一些挑战。 特别是,由于Azure SQL数据库仅在UTC时间(无时区)工作,并且我们需要本地时间,因此我们必须更改数据库中GETDATE() 所有地方的使用方式,事实证明,这比我预期的要多。 我创建了一个用户定义的函数,以获取在我的时区正确工作的本地时间: CREATE FUNCTION [dbo].[getlocaldate]() RETURNS datetime AS BEGIN DECLARE @D datetimeoffset; SET @D = CONVERT(datetimeoffset, SYSDATETIMEOFFSET()) AT TIME ZONE 'Pacific SA Standard Time'; RETURN(CONVERT(datetime,@D)); END 我遇到的问题是实际上GETDATE()在每个视图,存储过程,计算列,默认值,其他约束等中都使用此函数进行了更改。 实施此更改的最佳方法是什么? 我们正在受管实例的公开预览中。与仍然存在相同的问题GETDATE(),因此对解决此问题没有帮助。迁移到Azure是必需的。始终在该时区使用(并将使用)此数据库。

1
SQL Server 2014:有关不一致的自连接基数估计的任何解释?
考虑SQL Server 2014中的以下查询计划: 在查询计划中,自联接ar.fId = ar.fId产生的估计值为1行。但是,这在逻辑上是不一致的估计:ar只有20,608行,并且只有一个不同的值fId(准确地反映在统计数据中)。因此,此联接产生行(~424MMrow)的全叉积,导致查询运行几个小时。 我很难理解为什么SQL Server会提出一个很容易证明与统计数据不一致的估计。有任何想法吗? 初步调查和其他细节 根据Paul 在这里的答案,似乎用于估计联接基数的SQL 2012和SQL 2014启发式方法应该可以轻松处理需要比较两个相同直方图的情况。 我从跟踪标志2363的输出开始,但无法轻松理解。下面的代码段是否表示SQL Server正在比较的直方图fId和bId以便估计仅使用的联接的选择性fId?如果是这样,那显然是不正确的。还是我误读了跟踪标志输出? Plan for computation: CSelCalcExpressionComparedToExpression( QCOL: [ar].fId x_cmpEq QCOL: [ar].fId ) Loaded histogram for column QCOL: [ar].bId from stats with id 3 Loaded histogram for column QCOL: [ar].fId from stats with id 1 Selectivity: 0 请注意,我想出了几种变通办法,这些变通办法包含在完整的repro脚本中,并将此查询缩短为毫秒。这个问题的重点是了解行为,如何在以后的查询中避免它,以及确定它是否应与Microsoft一起提交。 …

2
如何在多行且不带逗号的情况下使用COALESCE?
我正在努力实现以下目标: California | Los Angeles, San Francisco, Sacramento Florida | Jacksonville, Miami 不幸的是,我正在“洛杉矶,旧金山,萨克拉曼多,杰克逊维尔,迈阿密” 我可以使用STUFF函数获得所需的结果,但是想知道是否有使用COALESCE的更干净的方法? STATE | CITY California | San Francisco California | Los Angeles California | Sacramento Florida | Miami Florida | Jacksonville DECLARE @col NVARCHAR(MAX); SELECT @col= COALESCE(@col, '') + ',' + city FROM tbl where city = …
27 sql-server  t-sql 

3
对数组成员的外键约束?
假设我有一个包含工作角色的表: CREATE TABLE roles ( "role" character varying(80) NOT NULL, CONSTRAINT "role" PRIMARY KEY (role) ); 假设我还有一个表,用户,并且每一行(一个特定的用户)可以具有任意数量的作业角色: CREATE TABLE users ( username character varying(12) NOT NULL, roles character varying(80)[] NOT NULL, CONSTRAINT username PRIMARY KEY (username) ); 我可能应该确保的每个成员都users.roles[]存在于role.role中。在我看来,我想要的是对每个成员的外键约束,users.roles[]例如,如果引用role.role。 对于postgres,这似乎是不可能的。我看错了方向吗?建议的“正确”处理方式是什么?

1
统计信息物理存储在SQL Server中的什么位置?
查询优化器所使用的统计信息在哪里物理存储在SQL Server数据库文件和缓冲池中? 更具体地说,是否有一种方法可以找出使用DMV和/或DBCC的统计信息所使用的页面? 我同时拥有《 SQL Server 2008内部原理》和《 SQL Server内部原理与故障排除》一书,但都没有谈论统计的物理结构。如果没有,我将无法找到此信息。

1
带日期的索引优化
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 我在PostgreSQL 9.0.8中有一个很大的对象表(15M +行),我想查询该表中的过时字段。 我想将查询除以数百万,以实现可伸缩性和并发性,并且我想获取几天前带有update_at字段的所有数据。 我已经在100万个ID上尝试了许多索引和查询,但是使用Heroku的Ronin硬件在100秒内似乎无法获得性能。 我正在寻找我没有试图使其尽可能高效的建议。 尝试#1 EXPLAIN ANALYZE SELECT count(*) FROM objects WHERE (date(updated_at)) < (date(now())-7) AND id >= 5000001 AND id < 6000001; INDEX USED: (date(updated_at),id) 268578.934 ms 尝试#2 EXPLAIN ANALYZE SELECT count(*) FROM objects WHERE ((date(now()) - (date(updated_at)) > …

2
急停阀芯指示哪些问题
当前在SQL Server 2008 R2上运行 我试图提高UPDATE语句的性能。我注意到弹出的计划中有一个渴望假脱机操作。我对假脱机操作的理解非常基础-他们在更新期间为表创建了临时存储。 我还知道,尽管它们可以防止更糟的执行时间,但急切的假脱机通常表明表结构和/或查询语句存在潜在的问题。 我的问题很简单:当您在查询计划中看到一个急切假脱机时,您首先要解决什么问题? 我会分析每一个我们的系统的一部分,以提高性能-我只是在寻找指导,我应该开始。

2
使用psql一次获取多个文件
我想以psql单个事务顺序执行几个sql脚本来设置数据库模式。做这个的最好方式是什么?在过去,我知道我遇到了一个psql包含其他文件的主脚本,但是我不记得该脚本的语法。
27 postgresql  psql 

5
获得随机订购的最佳方法是什么?
我有一个查询,希望将所得记录随机排序。它使用聚集索引,因此如果我不包括order by它,则可能会按该索引的顺序返回记录。如何确保随机的行顺序? 我知道这可能不会是“真正的”随机,伪随机足以满足我的需求。
27 sql-server 

1
PostgreSQL角色与用户,授予权限
我现在正在学习PostgreSQL和MySQL之间的区别,因为我有一个新项目,并且我还打算将现有软件从MySQL迁移到PostgreSQL。我实际上已经开始创建一个HTML表,并在两者之间比较了命令(针对用户/数据库/命令提示符等)。在这里阅读答案后,我注意到role似乎已被用作一个小组。与MySQL我有两个用户,基本公共(DELETE,INSERT,SELECT和UPDATE权限),并与一对夫妇的额外权限的管理员用户。 因此基本上是在Windows 7命令提示符下(仅限本地开发)... 角色是用户,组还是宽松使用的术语,特定于PostgreSQL? 如何为数据库中的所有表仅授予特定用户特定的权限? 如何为数据库中的所有表授予特定用户的所有权限? 在使用权限GRANT或REVOKE获得用户权限时,角色与用户相比如何?
27 postgresql  users 

4
什么是对表进行大的更改更好的方法:每次都删除或插入,或者存在UPDATE?
我正在做一个项目,每天需要在一张桌子中更改约36000条记录。我想知道什么会更好地执行: 删除行并插入新行,或者 更新现有的行 对我来说,删除所有行并插入新行比较容易,但是如果这将使表和索引碎片化并影响性能,那么我希望尽可能进行更新并仅在必要时删除/插入。 这将是每晚的服务,我不希望提高流程本身的速度。我更关注针对该表的查询的性能,总体而言,我已经有8900万条记录,以及该每晚过程将如何影响它。 我应该删除/插入记录,还是应该在每晚过程中更新现有记录(如果可能)?

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.