数据库管理员

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

5
在PostgreSQL中非常慢的DELETE,解决方法?
我在PostgreSQL 9.2上有一个数据库,该数据库的主结构包含约70个表,并且每个客户机模式的结构相同的变量数量各不相同,每个表有30个表。客户端模式具有引用主模式的外键,而不是相反的方式。 我刚刚开始使用从先前版本中获取的一些真实数据填充数据库。当我不得不在主模式的非常中央的表中进行批量删除时,数据库已达到约1.5 GB(预计数周之内将增长到几十GB)。所有相关的外键都标记为ON DELETE CASCADE。 这将花费很长时间也就不足为奇了,但是在12个小时之后,很明显,我最好从头开始,删除数据库并再次启动迁移。但是,如果我需要在数据库正常运行并且更大时再重复此操作,该怎么办?是否有其他更快的方法? 如果我编写了一个脚本,该脚本将浏览从属表,从中央表最远的表开始,逐表删除从属行,会更快吗? 一个重要的细节是某些表上有触发器。

7
在SQL Server 2005上获取最少的多列的最有效方法是什么?
我要从6列中获取最小值。 到目前为止,我已经找到了三种方法来实现此目的,但是我对这些方法的性能感到担忧,并且想知道哪种方法对性能更好。 第一种方法是使用大写语句。这是一个包含3列的示例,基于上面链接中的示例。我的案例陈述将更长,因为我将查看6列。 Select Id, Case When Col1 <= Col2 And Col1 <= Col3 Then Col1 When Col2 <= Col3 Then Col2 Else Col3 End As TheMin From MyTable 第二种选择是将UNION运算符与多个select语句一起使用。我将其放在接受Id参数的UDF中。 select Id, dbo.GetMinimumFromMyTable(Id) from MyTable 和 select min(col) from ( select col1 [col] from MyTable where Id = @id union …

2
有没有一种方法可以防止计算列中的标量UDF抑制并行性?
关于SQL Server 中标量UDF的危害,已经写了很多文章。随意搜索将返回大量结果。 但是,在某些地方,标量UDF是唯一的选择。 例如:在处理XML时:XQuery不能用作计算列定义。Microsoft记录的一个选项是使用Scalar UDF将XQuery封装在Scalar UDF中,然后在计算列中使用它。 这会产生各种影响,并有一些解决方法。 查询表时逐行执行 强制对表的所有查询顺序运行 您可以通过模式绑定该函数并持久保存计算的列或对其进行索引来解决逐行执行的问题。即使没有引用标量UDF,这两种方法都无法防止查询的强制序列化。 有已知的方法吗?

1
有哪些客观原因会首选SQL Server 2016而不是早期版本?
自从SQL Server 2005或2008年以来,由于Microsoft更加频繁地进行SQL Server版本升级,因此许多公司发现很难确定何时必须进行升级!而升级是“不错的选择” 本着一些以前的问题的精神,他们问为什么比以前的版本更喜欢各种SQL Server的较新版本,公司可能会考虑一些客观的技术或业务原因,以便公司将SQL Server 2016升级到较早的版本,甚至更高的版本。发布,例如SQL Server 2014? (关于SQL Server 2012与SQL Server 2008相比的这个问题,或者关于SQL Server 2012与SQL Server 2005相比的一个问题,就是这个问题的精神的示例。它们的答案还扩展了此处的一些原因。 SQL Server 2008或SQL Server 2005开始的公司)

1
如何卸载SQL Server Management Studio 2012?[关闭]
如何卸载SQL Server Management Studio 2012? ControlPanel的“卸载或更改程序”(在Windows 7 Prof中)提供一行条目: 而Internet搜索结果始终表明:“单击Microsoft SQL Server 2005,然后单击更改” 更新(评论肖恩·梅尔顿的答案): 选择“ Microsoft SQL Server 2012(64位)”->卸载/更改后,我观察到: 并且在没有任何SSMS或继续选项的情况下选择“删除”,“设置支持规则”后:


2
如何使用expdp和impdp命令传输数据?
我是Oracle新手,我的目的是将所有数据和元数据从一个模式转移到Oracle数据库中的另一个模式。我打算使用数据泵expdp和impdp命令。我对此有疑问: 是否可以在没有用户的情况下创建目标架构,还是应该先创建用户(它也会创建架构)? 我可以使用SYS(作为sysdba)帐户执行expdp和impdp命令吗?那是首选方法吗? 该语句是否从架构中获取所有对象(数据和元数据)并将它们移至其他架构中? expdp \"/ as sysdba\" schemas=<schemaname> directory=dumpdir dumpfile=<schemaname>.dmp logfile=expdp_<schemaname>.log 那么目标模式是impdp命令后源模式的精确副本吗?
29 oracle  schema  export  impdp  expdp 

1
如何复制巨大的postgres表?
我有巨大的postgres表(10GB数据-1.6亿条记录)。该表是静态的,并且没有对其执行任何写操作。我想复制它,执行写操作,重新索引它,然后通过一次快速事务删除旧的并将新的重命名为原始名称。 复制这么大表的最快方法是什么?
29 postgresql 



4
为大量ram调整postgresql
我有两个相同的服务器(就硬件而言),它们都是Windows Server 2008 R2的标准安装,并且安装的软件最少(基本上是我的代码和必需的东西,例如jvm等)。 在一台服务器上,我在第二台服务器postgresql 9.1上运行sql server 2005。这两个服务器在性能方面的差异是惊人的,在postgresql上是如此糟糕,以至于我对老板最初的“让我们使用postgresql而不是为sql server许可付费”感到遗憾。对于同一条命令,我们说的是30秒与15分钟之间的差异,这不仅是一个命令,而且是我向其抛出的任何查询或命令。它们都具有几乎相同的数据(以不同的顺序插入记录),并且两个数据库都具有完全相同的结构/索引等。 但我希望这只是性能调整的问题。问题是,sql server几乎在服务器上使用了所有32 gig的ram,而postgresl却什么也不用,绝对少于gig,尽管我实际上还没有弄清楚。 我如何让postgresql使用20多个演出的Ram?这些服务器是专门为此数据库材料构建的,因此,我认为数据库和支持过程未使用的所有内存都是浪费的。

5
将备份还原到旧版本的SQL Server
尝试将备份还原到SQL Server Express 2008数据库时,出现以下错误: Restore failed for Server '...\SQLEXPRESS'. (Microsoft.SqlServer.SmoExtended) System.Data.SqlClient.SqlError: The database was backed up on a server running version 10.50.1600. That version is incompatible with this server, which is running version 10.00.2531. Either restore the database on a server that supports the backup, or use a backup that …

2
将SQL Server实例根目录放在单独的驱动器上是否有用?
我知道在安装SQL Server时可以更改许多默认路径,通常在安装时,我将数据和日志文件夹更改为单独的驱动器(通常为D和E),但是最近我得到了一个预安装的计算机正在运行实例名称(而不是默认名称),并且他们已将实例根目录与mdf文件一起配置在D驱动器上。这意味着在通常只有一个文件夹和数据库文件的相对干净的驱动器上,我现在也已经完全安装了SQL Server二进制文件。 即我现在有以下内容: C:\Program Files\Microsoft SQL Server\ --Base Install D:\Microsoft SQL Server\MSSQL10_50.MyInstance --Instance Binaries D:\Microsoft SQL Server\MSSQL10_50.MyInstance\MSSQL\DATA --Data Files E:\Microsoft SQL Server\MSSQL10_50.MyInstance\MSSQL\LOGS --Log Files 通常我会在类似的地方运行: C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\ --Base Install & Default Instance Binaries D:\MSSQL\DATA --Data Files E:\MSSQL\LOGS --Log Files 我可以理解为什么有必要使用单独的实例二进制文件夹,但是我看不到为什么将所有这些二进制文件放在单独的驱动器上会很有用。 谁能告诉我为什么这样做是合理的?也许这根本没有什么不同?对我来说,这似乎很不整洁。

2
为什么GROUP BY语句中的通配符不起作用?
我正在尝试使以下SQL语句正常工作,但出现语法错误: SELECT A.*, COUNT(B.foo) FROM TABLE1 A LEFT JOIN TABLE2 B ON A.PKey = B.FKey GROUP BY A.* 在这里,A是一个有40列的宽表,如果可能的话,我想避免在GROUP BY子句中列出每个列的名称。我有很多这样的表,必须在这些表上运行类似的查询,因此我必须编写一个存储过程。解决此问题的最佳方法是什么? 我正在使用MS SQL Server 2008。


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.