数据库管理员

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

5
为什么将ALTER COLUMN设置为NOT NULL会导致大量日志文件增长?
我有一个表,其中有64m行,其数据占用磁盘上4.3 GB的空间。 每行大约是30个字节的整数列,外加一个NVARCHAR(255)用于文本的可变列。 我添加了一个NULLABLE列,具有data-type Datetimeoffset(0)。 然后,我为每一行更新了该列,并确保所有新插入的内容在该列中都放置了一个值。 一旦没有NULL条目,我就运行以下命令使我的新字段成为必填项: ALTER TABLE tblCheckResult ALTER COLUMN [dtoDateTime] [datetimeoffset](0) NOT NULL 结果是事务日志大小从6GB大幅增加到36GB以上,直到空间用完为止! 有谁知道SQL Server 2008 R2在做什么,以使这个简单的命令取得如此巨大的增长?

5
什么是键/值存储数据库?
我一直在看NoSQL的维基百科页面,它列出了键/值存储数据库的几种变体,但是在这种情况下,我找不到关于键/值存储的含义的任何详细信息。有人可以向我解释或链接解释吗?另外,什么时候可以使用这样的数据库?
56 nosql 

6
使用窗口功能的日期范围滚动总和
我需要计算日期范围内的滚动总和。为了说明这一点,使用AdventureWorks示例数据库,以下假设语法将完全满足我的需要: SELECT TH.ProductID, TH.TransactionDate, TH.ActualCost, RollingSum45 = SUM(TH.ActualCost) OVER ( PARTITION BY TH.ProductID ORDER BY TH.TransactionDate RANGE BETWEEN INTERVAL 45 DAY PRECEDING AND CURRENT ROW) FROM Production.TransactionHistory AS TH ORDER BY TH.ProductID, TH.TransactionDate, TH.ReferenceOrderID; 可悲的是,RANGE窗口框架范围当前在SQL Server中不允许间隔。 我知道我可以使用子查询和常规(非窗口)聚合来编写解决方案: SELECT TH.ProductID, TH.TransactionDate, TH.ActualCost, RollingSum45 = ( SELECT SUM(TH2.ActualCost) FROM Production.TransactionHistory AS TH2 …

7
如果一个人的名字为Null,那么它将如何破坏数据库?
我在BBC上阅读这篇文章。它讲述了一个叫珍妮弗·诺​​尔(Jenifer Null)的人的故事,以及她如何在使用在线数据库(如预订机票,网上银行等)时面对日常问题。 我并不精通数据库,因此我不经常使用它。当我创建一个网站进行学习时,服务器端表单验证使用了正则表达式。据我所知,它很乐意接受“ Null”这个名字。我还没有尝试过。 有人能解释这种情况何时发生的技术细节吗?表单验证只是做某事string == NULL还是某事?即使这样我也不认为NULL is same as "NULL"。

6
死锁的主要原因是什么,可以防止死锁吗?
最近,我们的一个ASP.NET应用程序显示了一个数据库死锁错误,要求我检查并修复该错误。我设法找到导致死锁的原因是存储过程正在严格更新游标中的表。 这是我第一次看到此错误,并且不知道如何有效地跟踪和修复它。我尝试了所有可能的方法,最后发现正在更新的表没有主键!幸运的是,这是一个身份专栏。 后来,我发现为脚本编写部署脚本的开发人员陷入困境。我添加了一个主键,问题就解决了。 我感到很高兴,回到了我的项目,并做了一些研究以找出造成这种僵局的原因... 显然,导致死锁的是循环等待条件。没有主键的更新显然要比使用主键的更新花费更长的时间。 我知道这不是一个明确的结论,这就是为什么我在这里发布... 缺少主键是问题所在吗? 除了互斥,保留和等待,没有抢占和循环等待之外,还有其他导致僵局的条件吗? 如何防止和跟踪死锁?

6
在仅使用文字值的WHERE子句中替换ISNULL()的不同方法有哪些?
这不是关于: 这不是接受用户输入或使用变量的全部查询的问题。 这是严格,对查询ISNULL()中使用WHERE条款,以取代NULL与金丝雀值值进行比较的谓语,而不同的方式来重写这些查询以优化搜索在SQL Server中。 你为什么不坐在那儿? 我们的示例查询针对SQL Server 2016上Stack Overflow数据库的本地副本,并查找NULL年龄小于或小于18的用户。 SELECT COUNT(*) FROM dbo.Users AS u WHERE ISNULL(u.Age, 17) < 18; 查询计划显示对相当周到的非聚集索引的扫描。 扫描操作符显示(由于在SQL Server的最新版本中对实际执行计划XML的添加),我们读取了每一个臭行。 总体而言,我们进行9157次读取,并占用大约半秒的CPU时间: Table 'Users'. Scan count 1, logical reads 9157, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. …
55 sql-server 

12
PostgreSQL无法在Mac上运行
整个错误显示为: psql:无法连接到服务器:没有这样的文件或目录。服务器是否在本地运行并在Unix域套接字“ /tmp/.s.PGSQL.5432”上接受连接? 这是我第二次在Mac上通过Homebrew设置Postgresql,我不知道发生了什么。以前,它一直在工作。在某个时候,我必须输入一个使事情搞砸的命令。我不确定。现在,每当我从命令行输入SQL命令时,都会收到上述消息。我已经运行了一个命令来检查服务器是否正在运行,并且显然没有运行。如果我尝试使用启动服务器 $ postgres -D / usr / local / pgsql / data 我收到以下错误: postgres无法访问服务器配置文件“ /usr/local/pgsql/data/postgresql.conf”:没有这样的文件或目录 我已经通过Homebrew卸载并重新安装了Postgresql,但是问题仍然存在。我完全不知道该如何工作。任何帮助,将不胜感激。
55 postgresql 



3
何时在MySQL中使用视图?
当通过多个联接创建表以用于分析时,何时使用视图而不是创建新表? 我更喜欢使用视图的原因之一是数据库模式是由我们的管理员从Ruby内部开发的,而我对Ruby并不熟悉。我可以要求创建表,但是需要额外的步骤,在开发/测试新联接时,我希望有更大的灵活性。 我开始在SO的一个相关问题(何时使用R,何时使用SQL)的答案之后使用视图。投票最多的答案开始为“在SQL中进行数据操作,直到数据在单个表中,然后在R中进行其余操作。” 我已经开始使用视图,但是遇到了一些视图问题: 查询要慢得多 视图不会从生产中转储到我用于分析的备份数据库中。 视图是否适合此用途?如果是这样,我应该期望性能下降吗?有没有一种方法可以加快视图查询?

3
如何插入包含外键的行?
使用PostgreSQL v9.1。我有以下表格: CREATE TABLE foo ( id BIGSERIAL NOT NULL UNIQUE PRIMARY KEY, type VARCHAR(60) NOT NULL UNIQUE ); CREATE TABLE bar ( id BIGSERIAL NOT NULL UNIQUE PRIMARY KEY, description VARCHAR(40) NOT NULL UNIQUE, foo_id BIGINT NOT NULL REFERENCES foo ON DELETE RESTRICT ); 假设第一个表foo是这样填充的: INSERT INTO foo (type) …

2
如何创建Unicode参数和变量名
所有这些工作: CREATE DATABASE [¯\_(ツ)_/¯]; GO USE [¯\_(ツ)_/¯]; GO CREATE SCHEMA [¯\_(ツ)_/¯]; GO CREATE TABLE [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]([¯\_(ツ)_/¯] NVARCHAR(20)); GO CREATE UNIQUE CLUSTERED INDEX [¯\_(ツ)_/¯] ON [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]([¯\_(ツ)_/¯]); GO INSERT INTO [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]([¯\_(ツ)_/¯]) VALUES (N'[¯\_(ツ)_/¯]'); GO CREATE VIEW [¯\_(ツ)_/¯].[vw_¯\_(ツ)_/¯] AS SELECT [¯\_(ツ)_/¯] FROM [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]; GO CREATE PROC [¯\_(ツ)_/¯].[sp_¯\_(ツ)_/¯] @Shrug NVARCHAR(20) AS SELECT [¯\_(ツ)_/¯] FROM [¯\_(ツ)_/¯].[vw_¯\_(ツ)_/¯] …

4
如何在Mac OS X上运行psql?
我使用一键安装程序在装有Mac OS X的计算机上安装了PostgreSQL 。然后,我尝试使用psql命令访问PostgreSQL ,但是它似乎不可用。 我收到此消息: psql -bash: psql: command not found 我还需要安装更多东西吗?或者如何配置PostgreSQL,以便可以在计算机上使用它?

11
将数组参数传递给存储过程
我有一个过程,可以捕获一堆记录(1000条记录)并对其进行操作,完成后,我需要将大量记录标记为已处理。我可以用大量的ID来表明这一点。我试图避免使用“循环更新”模式,因此我想找到一种更有效的方法来将此ID包发送到MS SQL Server 2008存储的proc中。 提案1-表格值参数。我可以定义一个带有ID字段的表类型,然后发送一个包含ID的表进行更新。 提案2-proc正文中带有OPENXML()的XML参数(varchar)。 提案3-列表解析。如果可能的话,我宁愿避免这种情况,因为它似乎笨拙且容易出错。 其中有什么偏好,或者我错过了任何想法?

2
如何用表值函数联接表?
我有一个用户定义的函数: create function ut_FooFunc(@fooID bigint, @anotherParam tinyint) returns @tbl Table (Field1 int, Field2 varchar(100)) as begin -- blah blah end 现在,我想将其加入另一个表,如下所示: select f.ID, f.Desc, u.Field1, u.Field2 from Foo f join ut_FooFunc(f.ID, 1) u -- doesn't work where f.SomeCriterion = 1 换句话说,对于所有Foo记录,其中SomeCriterion均为1,我想查看Foo ID和Desc以及输入所返回的Field1和的值。Field2ut_FooFuncFoo.ID 这样做的语法是什么?

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.