数据库管理员

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

4
用sp_开头用户存储过程的名称仍然错误吗?
我的一位同事在我们的SQL Server 2008 R2数据库中命名了一个存储过程sp_something。当我看到此消息时,我立即想到:“那是错误的!” 并开始在我的书签中搜索此在线文章,该文章解释了错误的原因,因此我可以向我的同事提供解释。 在这篇文章(由Brian Moran撰写)中,解释了给存储过程一个sp_前缀使SQL Server可以在master数据库中查看已编译的计划。由于sp_sproc不在此处,因此SQL Server将重新编译该过程(并为此需要一个专用的编译锁,从而导致性能问题)。 本文提供了以下示例,以显示两个过程之间的区别: USE tempdb; GO CREATE PROCEDURE dbo.Select1 AS SELECT 1; GO CREATE PROCEDURE dbo.sp_Select1 AS SELECT 1; GO EXEC dbo.sp_Select1; GO EXEC dbo.Select1; GO 您运行此程序,然后打开Profiler(添加“存储过程-> SP:CacheMiss事件”)并再次运行存储过程。您应该看到两个存储过程之间的区别:sp_Select1存储过程将比存储过程生成一个更多的SP:CacheMiss事件Select1(本文引用了SQL Server 7.0和SQL Server 2000。) 当我在SQL Server 2008 R2环境中运行该示例时SP:CacheMiss,两个过程都得到相同数量的事件(在tempdb和另一个测试数据库中)。 所以我想知道: 我可以在执行示例时做错什么吗? sproc sp_something在新版本的SQL Server中,“不命名用户” adagium是否仍然有效? 如果是这样,是否有一个很好的示例显示其在SQL …


5
为什么InnoDB 100x上的简单SELECT速度比MyISAM慢?
我有一个很烦人的问题。我想使用INNODB作为我的主要数据库引擎,而放弃MyISAM,因为我需要前者使用galera-cluster来实现冗余。 我将newbb_post表复制(描述如下)到一个名为的新表中,newbb_innopost并将其更改为InnoDB。这些表当前5,390,146每个都有条目。 在新启动的数据库上运行这些选择(因此此时不涉及缓存!),该数据库会产生以下结果(省略完整的输出,请注意,我什至不要求数据库对结果进行排序): 从newbb_post中选择post.postid,post.attach作为post,而post.threadid = 51506; 。 。 | 5401593 | 0 | | 5401634 | 0 | + --------- + -------- + 设置62510行(0.13秒) 从newbb_innopost中选择post.postid,post.attach作为post,而post.threadid = 51506; 。 。 | 5397410 | 0 | | 5397883 | 0 | + --------- + -------- + 设置62510行(1分22.19秒) 0.13秒至86.19秒(!) 我想知道为什么会这样。我确实在这里阅读了有关InnoDB的Stackexchange的一些答案,并且有人建议将innodb_buffer_pool大小增加到已安装RAM的80%。这不会解决问题,对特定ID的初始查询将至少花费50倍以上的时间,并使整个Web服务器停滞不前,从而对数据库进行连接和查询。之后可能会启动缓存/缓冲区,但是此数据库中有超过100.000个线程,因此很有可能缓存将永远无法容纳要服务的所有相关查询。 上面的查询很简单(没有连接),并且使用了所有键: 从newbb_innopost解释选择post.postid,post.attach作为post在哪里post.threadid = …

3
每个表都应该有一个单字段代理/人为主键吗?
我了解代理/人工密钥的一大好处-它们不会更改,因此非常方便。无论它们是单个字段还是多个字段,只要它们是“人造”字段,都是如此。 但是,有时将自动递增的整数字段用作每个表的主键似乎是一个政策问题。拥有这样的单字段密钥始终是最好的主意吗?为什么(为什么不这样做)? 明确地说,这个问题不是关于人工还是自然的问题,而是关于所有人工密钥是否应为单一字段的问题


5
我应该如何设计友谊表?
如果A是的朋友B,那么我应该同时存储值AB和BA,还是一个就足够了?两种方法的优缺点是什么? 这是我的观察: 如果同时保留两者,则在收到朋友的请求时必须同时更新两者。 如果我没有同时保留两者,那么我发现在JOIN对该表进行多次处理时很难。 目前,我以一种方式保持这种关系。 那么在这种情况下我该怎么办?有什么建议吗?

7
如何判断是否仍在使用SQL Server数据库?
我们正在寻求停用一个仍具有几个数据库的SQL Server实例。 如何判断用户或Web应用程序仍在使用它们? 我发现一个论坛线程具有一个T-SQL查询,您可以运行该查询来检索上一个查询日期。看来可行,但是我想知道此信息是否足够有效以删除数据库。是吗? 如果您有其他方法也有帮助。
33 sql-server  t-sql 

2
在大表中填充新列的最佳方法?
我们在Postgres中有一个2.2 GB的表,其中有7,801,611行。我们正在向其中添加一个uuid / guid列,我想知道填充该列的最佳方法是什么(因为我们想向其添加NOT NULL约束)。 如果我正确理解Postgres,从技术上讲,更新就是删除和插入,因此这基本上是在重建整个2.2 GB表。另外,我们有一个正在运行的奴隶,所以我们不想让它落后。 有什么方法比编写随时间推移缓慢填充脚本的方法更好?

2
PK索引中的列顺序重要吗?
我有一些具有相同基本结构的非常大的表。每个都有一个RowNumber (bigint)和DataDate (date)列。每天晚上使用SQLBulkImport加载数据,并且从未加载过任何“新”数据-它是历史记录(SQL Standard,不是Enterprise,因此没有分区)。 因为每个数据位都需要绑定到其他系统,并且每个RowNumber/DataDate组合都是唯一的,所以这就是我的主键。 我注意到,由于我在SSMS Table Designer中定义PK的方式,RowNumber第一和DataDate第二列出了。 我还注意到,我的碎片始终非常高,高达〜99%。 现在,由于每个DataDate索引仅出现一次,所以我希望索引器每天都添加到页面中,但是我想知道它是否实际上是RowNumber首先基于索引编制的,因此是否需要转移其他所有内容? Rownumber不是一个标识列,它是一个由外部系统生成的int(很糟糕)。它在每个开始时重置DataDate。 示例数据 RowNumber | DataDate | a | b | c..... 1 |2013-08-01| x | y | z 2 |2013-08-01| x | y | z ... 1 |2013-08-02| x | y | z 2 |2013-08-02| x | y | z …

4
升级生产RDS实例的最佳方法是什么?
我将MySQL小型RDS实例作为生产系统的一部分,我想通过提供的IOPS将其升级到中等实例。 作为老式的DBA,我知道“添加从属;升级为主控;切换客户端”方法,但是AWS承诺提供神奇的一键式升级路径,即“升级实例”,“添加提供的IOPS”。 在测试RDS实例上对此进行了尝试,停机时间过长,恕我直言:中小型升级大约需要5分钟,切换到提供的IOPS大约需要30分钟(!!!)。 这是正常行为吗? 有什么方法可以在不停机的情况下在生产RDS上运行升级吗? 您是否建议采用“停止;创建快照;从快照还原到更大的实例”的方式?
33 mysql  amazon-rds 



5
逻辑运算符OR AND,条件和条件在WHERE中
让我们检查以下两个语句: IF (CONDITION 1) OR (CONDITION 2) ... IF (CONDITION 3) AND (CONDITION 4) ... 如果CONDITION 1是TRUE,将CONDITION 2被检查吗? 如果CONDITION 3是FALSE,将CONDITION 4被检查吗? 关于以下条件WHERE:SQL Server引擎会优化WHERE子句中的所有条件吗?程序员是否应该以正确的顺序放置条件,以确保SQL Server优化程序以正确的方式解决该问题? 添加: 感谢Jack的链接,这让T-SQL代码感到惊讶: IF 1/0 = 1 OR 1 = 1 SELECT 'True' AS result ELSE SELECT 'False' AS result IF 1/0 = 1 AND 1 = …

4
如何获取SQL Server表中每行的实际数据大小?
我发现此脚本 sql-server-2005-reaching-table-row-size-limit 似乎返回每个定义的数据类型长度的行大小。我需要一个脚本,该脚本将为我提供表中的所有行,这些行的最大数据大小超过建议的8024(无论MS建议如何)
33 sql-server 

7
如何查看Oracle中的数据库列表?
有相当于MySQL的SHOW DATABASES陈述吗? 是否可以在集群中找到数据库?即数据库存在于其他系统上的网络上? 我可以分析Oracle安装中存在的文件以找到相同的文件吗? 给定对Oracle系统的完整访问凭据,您将如何枚举所有存在的数据库?
33 oracle 

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.