数据库管理员

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

3
COALESCE与ISNULL的性能差异?
我已经看到很多人使用COALESCE函数代替ISNULL。通过互联网搜索,我发现COALESCE是ANSI标准,因此我们知道使用COALESCE的好处。但是,ISNULL似乎更易于阅读,因为它看起来更清楚自己在做什么。 我还意识到ISNULL有点棘手,因为它在不同的数据库服务器和不同的语言上有不同的作用。 在我看来,所有这些都归结为风格和标准。鉴于样式是主观的,是否有任何理由在ISNULL上使用COALESCE(反之亦然)?具体来说,是否有一个相对于另一个的性能优势?

7
如何在SQL Server中将日期和时间合并到datetime2?
鉴于以下组件 DECLARE @D DATE = '2013-10-13' DECLARE @T TIME(7) = '23:59:59.9999999' 将它们结合起来以产生DATETIME2(7)具有价值的结果的最佳方法是'2013-10-13 23:59:59.9999999'什么? 下面列出了一些无效的内容。 SELECT @D + @T 操作数数据类型日期对于加法运算符无效。 SELECT CAST(@D AS DATETIME2(7)) + @T 操作数数据类型datetime2对于加法运算符无效。 SELECT DATEADD(NANOSECOND,DATEDIFF(NANOSECOND,CAST('00:00:00.0000000' AS TIME),@T),@D) datediff函数导致溢出。分隔两个日期/时间实例的日期部分的数量太大。尝试将datediff与不太精确的datepart一起使用。 *使用可以避免在Azure SQL数据库和SQL Server 2016中发生溢出DATEDIFF_BIG。 SELECT CAST(@D AS DATETIME) + @T 数据类型datetime和time在add运算符中不兼容。 SELECT CAST(@D AS DATETIME) + CAST(@T AS DATETIME) …

6
每个客户创建数据库会遇到什么问题?
我记得在stackoverflow播客中,Fog Creek为每个客户使用了一个数据库,用于Fogbugz。我认为这意味着Fogbugz On Demand服务器具有成千上万个数据库。 我们才刚刚开始开发Web应用程序,并且有类似的问题要解决(很多拥有自己孤立数据的客户)。 我对每个客户使用数据库有什么问题?我该如何解决? 我的初步想法 每个客户的数据库优势 更简单的数据库架构 更简单的备份-您可以依次备份每个客户,而不会真正影响其他客户。 轻松导出给定的客户数据。 更好的缓存性能-写入更活跃的表之一只会影响执行写入操作的单个客户。 跨硬件更容易扩展。例如,当我们需要从1台服务器转到2台服务器时,我们只需将一半的客户转移到新服务器上。 缺点 MySQL可以应付5,000个数据库吗?性能会糟透吗? 对模式的更改可能很难在所有数据库中复制出来。我们真的真的需要为此制定一个自动化计划,例如对架构进行版本控制以及一个脚本,该脚本可以了解如何将数据库从一个版本移植到另一个版本。 做所有客户共同的事情可能很尴尬或不可能 与上述类似,但是我们想要对所有客户执行的任何分析都是不可能的。例如,我们应如何跟踪所有客户的使用情况?

12
为什么不将主键/外键匹配用于联接?
据我所知,许多DBMS(例如mysql,postgres,mssql)仅使用fk和pk组合来约束对数据的更改,但是它们很少用于本地自动选择要连接的列(就像自然连接使用名称一样)。这是为什么?如果您已经用pk / fk定义了2个表之间的关系,为什么数据库无法弄清楚如果我将那些表联接起来,我想在pk / fk列上联接它们? 编辑:澄清一下: 假设我有一个table1和一个table2。table1在a列上有一个外键,该外键引用了table2的b列上的主键。现在,如果我加入这些表,则必须执行以下操作: SELECT * FROM table1 JOIN table2 ON table1.a = table2.b 但是,我已经使用键定义了table1.a引用table2.b,因此在我看来,让DBMS系统自动使用table1.a和table2.b作为联接列并不难,这样一个人可以简单地使用: SELECT * FROM table1 AUTO JOIN table2 但是,许多DBMS似乎并未实现这样的功能。
48 mysql  sql-server 

2
NUMERIC和DECIMAL之间有什么区别吗?
我知道SQL Server中的NUMERIC和DECIMAL数据类型是相同的:创建它们的语法是相同的,可以在其中存储的值的范围是相同的,等等。 但是,MSDN文档将两者之间的关系描述如下: 数字在功能上等同于十进制。 通常,当我看到限定词“在功能上等效”时,这意味着这两件事并不完全相同,但是它们是两种不同的类型,它们与外界无法区分。 这是真的吗?NUMERIC和DECIMAL之间是否有区别,只是外部观察者的行为相同?还是它们实际上是等效的,例如NUMERIC只是DECIMAL的传统同义词吗?
47 sql-server 

4
群集,事务复制与可用性组
假设您需要确保依赖于SQL Server 2012的应用程序全天候可用,因为它的数据库后端即使一台服务器计算机出现故障也是如此。 作为开发人员而不是DBA,我努力了解何时使用哪种方案进行故障转移/高可用性: Windows故障转移群集中的两台(或更多)服务器,SQL Server作为群集实例 两个(或多个)SQL Server实例与事务复制保持最新 SQL Server可用性组中的两个(或更多)SQL Server,以同步提交模式配置 这些方案中的每个方案都适合哪种工作负载,这些方案可以处理哪种故障/停机?它们是否具有可比性/可互换性?

2
兼容性级别80的实际行为是什么?
有人可以让我对兼容模式功能有更好的了解吗?它的行为与我预期的不同。 据我了解兼容模式,这是有关各种版本的SQL Server之间的某些语言结构的可用性和支持。 它不会影响数据库引擎版本的内部工作。它将尝试阻止使用早期版本中尚不可用的功能和构造。 我刚刚在SQL Server 2008 R2中创建了一个兼容级别为80的新数据库。用一个int列创建一个表,并用几行填充它。 然后执行带有row_number()函数的选择语句。 我的想法是,由于row_number函数仅在2005年才引入,所以这会在compat 80模式下引发错误。 但是令我惊讶的是,这个方法很好。然后,可以肯定的是,仅当您“保存一些东西”时才评估兼容规则。因此,我为row_number语句创建了一个存储的proc。 存储的proc创建很好,我可以完美地执行它并获得结果。 有人可以帮我更好地了解兼容模式的工作方式吗?我的理解显然是有缺陷的。



8
如何快速缩小所有数据库的所有文件?
在SQL Server(在本例中为2008)中,如何快速缩小实例上所有数据库的所有文件(日志和数据)?我可以遍历SSMS,然后右键单击每个,然后选择“任务”->“收缩”,但是我正在寻找更快的东西。 我编写了一些“创建数据库”脚本的脚本,但忘记了它们具有默认值的膨胀大小,并且在此项目中不需要为这些文件保留太多的空间。

2
到目前为止的铸造是值得肯定的,但这是一个好主意吗?
在SQL Server 2008中,添加了日期数据类型。 将datetime列强制转换为date可精简并且可以在datetime列上使用索引。 select * from T where cast(DateTimeCol as date) = '20130101'; 您还有另一个选择是使用范围。 select * from T where DateTimeCol >= '20130101' and DateTimeCol < '20130102' 这些查询是否同样好,还是应该优先于另一个?
47 sql-server 

3
如何使sqlplus输出显示在一行中?
我有一张有100列的桌子。在SQL Plus输出换行中选择数据时,很难读取。 我想要的是出现水平滚动条或以某种方式将输出发送到 less 我在SQLPlus中运行以下语句- SET LINESIZE 32000; SET PAGESIZE 40000; SET LONG 50000; SPOOL output.txt SELECT * FROM big_table; 然后bash我跑- 少output.txt 输出仍然显示为已包装且不可读。
46 oracle  sqlplus 

6
.bak文件在SSMS中的任何目录中都不可见
我今天有一个其他人创建的.bak文件,是通过SSMS 2008 R2手动创建的。我正在尝试手动还原数据库,但是不幸的是,当我浏览该文件时,该文件没有出现。 我可以编写恢复过程的脚本,但是我以前已经看到过此问题,并且不确定是什么原因导致.bak不出现。

6
移动数据库(备份,还原)后,我必须重新添加用户
我有时使用SQL Server Management Studio中的数据库备份和还原功能将数据库(SQL Express 2012)从开发计算机移至服务器,反之亦然。 每当执行此操作时,目标计算机上的应用程序都无法访问数据库,直到我从数据库用户(数据库,安全性,SQL Server Management Studio中的用户)删除它们使用的用户“ george”,并将其重新添加为安全性,登录名,地理/属性,用户映射下的所有者。 有一个更好的方法吗?似乎有点令人费解。

2
数据库“所有者”的目的是什么?
今天,在对服务代理问题进行故障排除时,我发现数据库所有者是离开公司的一名员工的Windows登录名。他的登录信息已被删除,因此查询通知失败。 最好的解决方法是让“ sa”成为数据库所有者。我们对其进行了更改,从而清除了队列。 我的(非常基本的)问题:数据库所有者是什么,数据库的目的是什么?

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.