数据库管理员

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

4
轻松显示两个表或查询之间不同的行
假设您有两个应该具有/返回相同数据的不同表/查询。您要验证这一点。像下面的示例一样,比较每个列的简单方法是显示每个表中所有不匹配的行吗?假设表中有30列,其中许多是可空的。 当没有PK或每个PK可能有重复项时,仅在PK列上进行联接是不够的,并且必须使用30个可以正确处理NULL的联接条件以及讨厌的WHERE条件进行FULL JOIN排除匹配的行。 通常,当我针对未清理或未完全理解的数据编写新查询时,问题最严重,并且逻辑上可用的PK的可能性极低。我用两种不同的方法来解决问题,然后比较它们的结果,这些差异突出了我不知道的数据中的特殊情况。 结果需要如下所示: Which Col1 Col2 Col3 ... Col30 ------ ------ ------ ------ ------ TableA Cat 27 86 -- mismatch TableB Cat 27 105 -- mismatch TableB Cat 27 87 -- mismatch 2 TableA Cat 128 92 -- no corresponding row TableB Lizard 83 NULL -- no corresponding …

6
如何防止索引重组期间事务日志变满?
我们有多台机器,我们已将事务日志的大小预分配为50gb。我尝试重新整理的表格大小为55-60 GB,但会不断增加。我要重组的主要原因是要回收空间和任何性能收益,因为这是额外的好处。 该表的碎片级别为30-35%。在其中一些计算机上,我收到“事务日志已满”错误,并且重组失败。事务日志大小达到48gb。有什么好方法可以解决这个问题?我们没有打开自动增量功能,我不愿意这样做。 我可以将日志大小增加到一个更大的值,但是随着将来表大小的增加,该值可能会不够。如果我要平等地增加日志大小,它也会破坏进行重组以回收空间的目的。关于如何有效应对这一问题的任何想法?由于无法接受数据丢失,因此无法使用批量模式。

2
类型字段的INT或CHAR
什么是一个表,一个最好的设计Type是现场int还是char(1)?换句话说,给定此架构: create table Car ( Name varchar(100) not null, Description varchar(100) not null, VehType .... not null ) VehType成为an int或a 更有效(在性能方面更明智)char(1)?假设您有五种类型的汽车,应该使用递增值0-> 4还是类型的字符(例如“ v”,“ s”,“ c”,“ t”,“ m”)? 如果不止如此,我将使用单独的Type表并具有外键关系,但我认为没有必要。 我注意到sys.objects目录视图使用字符作为type字段。有什么理由吗?我是不是在这里捉襟见肘,是否更适合我?

3
通常“ WHERE 1 = 1”会影响查询性能吗?
我最近看到了一个问题“ where 1 = 1 statement”;我在构造动态SQL时经常使用的SQL构造,目的是编写更简洁的代码(从宿主语言的角度来看)。 一般来说,对SQL语句的这种添加是否会对查询性能产生负面影响?我不是在寻找有关特定数据库系统的答案(因为我已经在DB2,SQL Server,MS-Access和mysql中使用了它),除非没有具体说明就不可能回答。

1
如何在PostgreSQL中将字符串转换为双精度?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 4年前关闭。 如何在PostgreSQL中将字符串转换为双精度? 我尝试了类似的东西: update points set latitude2 = cast(latitude as double) ; 其中latitude是一个字符串,而latitude2是一个double。我就是无法正常工作。
19 postgresql 

4
是否可以在sql-server中备份和还原数据库的一部分?
我们有一个sql-server 2005数据库,我们定期将其从客户端站点转移到我们的客户端站点。这需要很长时间,因为我们没有直接连接,必须通过其基于Web的文件传输应用程序传输文件。该数据库当前大约为10GB,但是我们不需要所有数据-大多数数据位于审计表和可重新生成计算值的表中。 我已经考虑过创建一个文件组来保存审核表,并希望我可以备份和还原主文件组。我可以很好地备份,但是在还原时出现错误,提示我没有将其还原到同一数据库。是否可以使用文件组将数据库的一部分还原到其他服务器?有一个更好的方法吗?

3
列名命名约定和最佳实践
在列命名方面,我想对最佳做法提出一些专家意见。 背景是根据Wikipedia的以下语法, SELECT ... FROM Employees JOIN Timesheets USING (EmployeeID); 比 SELECT ... FROM Employees JOIN Timesheets ON (Employees.EmployeeID = Timesheets.EmployeeID); 但是,该JOIN ... USING语法仅适用于所有具有全局唯一名称的主键列。因此,我想知道这是否被认为是正确的做法。 我个人经常使用PK列id和外键列创建表othertable_id。但是那样就无法使用USING或NATURAL JOIN。 任何与设计风格或表设计最佳实践指南的链接也将不胜感激!

3
收缩SQL Server日志文件如何影响性能?
我有一个SQL Server 2008数据库,该数据库的数据文件大小约为2GB,但日志文件超过8GB。在2008年之前的数据库中,我可以使用“备份日志”和该TRUNCATE_ONLY选项,但是在2008年及以后的数据库中不再可用。 我确实有一个脚本会截断日志文件: USE [MyDatabase] GO ALTER DATABASE [MyDatabase] SET RECOVERY SIMPLE WITH NO_WAIT DBCC shrinkfile('MyDatabase_log', 1) ALTER DATABASE [MyDatabase] SET RECOVERY FULL WITH NO_WAIT GO 这会完全截断日志文件,但是我的问题是:这会影响性能吗? 我每天执行两次完整备份,因此就数据前滚而言,确实不需要日志。



9
在标准版上监视Oracle数据库性能的工具
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 2年前关闭。 这是我在寻找的东西: 适用于标准版,即没有诊断包。 提供当前和历史绩效数据。 良好的视觉效果,可轻松发现趋势并将其呈现给管理层。 如果您使用过该工具,那么我会对您发现的优缺点感兴趣。我可以拿出一个清单,但是实际使用该工具的见解要有价值得多。

3
替代字符串或执行过程以防止SQL查询代码重复的替代方法?
免责声明:作为一个只使用数据库的人,请耐心等待。(大多数时候,我会在工作中进行C ++编程,但是每个奇数月我都需要在Oracle数据库中搜索/修复/添加某些内容。) 我一再需要编写复杂的SQL查询,无论是针对临时查询还是针对应用程序内置的查询,其中大部分查询只是重复的“代码”。 用传统的编程语言编写此类可憎的代码会给您带来深重的麻烦,但是我(I)尚未找到任何体面的技术来防止SQL查询代码重复。 编辑: 1,我要感谢对我的原始示例进行了出色改进的回答者。但是,这个问题与我的示例无关。这是关于SQL查询中的重复性。这样,到目前为止的答案(JackP,Leigh)在显示可以通过编写更好的查询来减少重复性方面做得很好。但是即使如此,您仍然面临着一些重复性,这些重复性显然无法消除:这总是使SQL困扰我。在“传统”编程语言中,我可以进行大量重构以最大程度地减少代码中的重复性,但是对于SQL,似乎没有(?)工具允许这样做,除了以重复的方式编写较少的语句。 请注意,我再次删除了Oracle标记,因为如果没有数据库或脚本语言可以支持更多功能,我将非常感兴趣。 这是我今天拼凑而成的一颗宝石。它基本上报告单个表的一组列中的差异。请略读以下代码,特别是。最后是大型查询。我将在下面继续。 -- -- Create Table to test queries -- CREATE TABLE TEST_ATTRIBS ( id NUMBER PRIMARY KEY, name VARCHAR2(300) UNIQUE, attr1 VARCHAR2(2000), attr2 VARCHAR2(2000), attr3 INTEGER, attr4 NUMBER, attr5 VARCHAR2(2000) ); -- -- insert some test data -- insert into TEST_ATTRIBS values ( …

4
使用ORM时,在数据库设计中需要注意哪些事项
当您知道使用对象关系映射器(ORM)维基百科访问数据库时,需要注意哪些数据库设计陷阱?另请参阅实体框架NHibernate或LLBLGenPro。 作为示例,我将注意到SqlServer的RPC调用的2100参数限制。当使用LLBLgen和使用复合主键的联接表时,这是一个问题。有关复合键,请参见MSDN文章。
19 performance  orm 

5
为什么主键有自己的名称?
从数学的角度来看,假设一个表最多具有一个主键,那么用某种任意名称而不是简单的表属性来引用主键似乎是一个短时的设计决策。 因此,要将主键从非集群键更改为集群键,反之亦然,您必须首先搜索其名称,然后删除它,最后读取它。 使用我看不到的任意名称是否有一些优势,或者DBMS不对主键使用任意名称? 编辑2011-02-22 (对于那些不想在那里排序的人,则为02/22/2011): 让我展示一下该函数,您可以使用该函数从其表名派生主键的名称(使用早期的sql-sever aka sybase系统表): create function dbo.get_pk (@tablename sysname) returns sysname as begin return (select k.name from sysobjects o join sysobjects k on k.parent_obj = o.id where o.name = @tablename and o.type = 'U' and k.type = 'k') end go 如gbn所述,当您不提供显式名称时,没有人真的喜欢生成的名称: create table example_table ( id …

2
MySQL VARCHAR和TEXT数据类型有什么区别?
在版本5.0.3(允许VARCHAR为65,535字节并停止截断尾随空格)之后,这两种数据类型之间是否有主要区别? 我正在阅读差异列表,注释中仅有的两个是: 对于BLOB和TEXT列上的索引,必须指定索引前缀长度。对于CHAR和VARCHAR,前缀长度是可选的。请参见第7.5.1节“列索引”。 和 BLOB和TEXT列不能具有DEFAULT值。 因此,由于TEXT数据类型有这两个限制,为什么要在varchar(65535)上使用它?是否有一个相对于另一个的性能影响?

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.