数据库管理员

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

2
查找与给定主键关联的外键
我想要一种通过PK / FK关系建立给定数据库中的哪些列的方法。我可以通过以下方式返回给定表的PK / FK信息 SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS cu WHERE EXISTS ( SELECT tc.* FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc WHERE tc.CONSTRAINT_CATALOG = 'MyDatabase' AND tc.TABLE_NAME = 'MyTable' /*AND tc.CONSTRAINT_TYPE = 'PRIMARY KEY'*/ AND tc.CONSTRAINT_NAME = cu.CONSTRAINT_NAME); GO 但是对于从这样的查询返回的PK,我如何建立关联的FK(假设有一个)? 我知道您也可以通过以下方式获取引用的表: SELECT CONSTRAINT_NAME = name, FOREIGN_SCHEMA = OBJECT_SCHEMA_NAME(parent_object_id), FOREIGN_TABLE = OBJECT_NAME(parent_object_id), …

1
选择索引视图的聚集索引有哪些因素?
简而言之 ,查询优化器选择索引视图索引时会考虑哪些因素? 对我来说,索引视图似乎无视我对Optimizer如何选择索引的理解。我以前看过这个问题,但是OP不太受欢迎。 我确实在寻找路标,但是我将伪造一个伪示例,然后发布带有大量DDL,输出和示例的真实示例。 假设我使用的是Enterprise 2008+,请理解 with(noexpand) 伪示例 以这个伪示例为例:我创建一个具有22个联接,17个过滤器和一个马戏团小马的视图,该马戏小马穿过一千万个行表。这种观点很昂贵(是的,用大写字母E)可以实现。我将对SCHEMABIND进行索引并为视图建立索引。然后一个 SELECT a,b FROM AnIndexedView WHERE theClusterKeyField < 84。在Optimizer逻辑中,我无法进行底层联接。 结果: 没有提示:4825读取720行,在76ms内读取47 cpu,估计的子树开销为0.30523。 使用提示:17次读取,720行,4 ms内15 cpu,估计的子树成本为0.007253 那么这是怎么回事?我已经在Enterprise 2008、2008-R2和2012中进行了尝试。通过每一个度量标准,我都认为使用视图索引的效率大大提高。我没有参数嗅探问题或数据偏斜,因为这是广告问题。 一个真实(长)的例子 除非您是一个受虐狂,否则您可能不需要或不想阅读此部分。 是的 ,企业版。 Microsoft SQL Server 2012-11.0.2100.60(X64)2012年2月10日19:39:15版权所有(c)Windows NT 6.2(Build 9200:)上的Microsoft Corporation Enterprise Edition(64位)(Hypervisor) 风景 CREATE VIEW dbo.TimelineMaterialized WITH SCHEMABINDING AS SELECT TM.TimelineID, TM.TimelineTypeID, TM.EmployeeID, …

5
在SSMS中找不到服务器代理
我正在遵循该指南-http: //www.sqlchicken.com/2009/07/how-to-create-a-server-side-trace-with-sql-profiler/,该指南将一直运行到步骤8 现在安排新创建的脚本。在SSMS中,连接到要跟踪的服务器。转到您的SQL Server代理并展开它,以便可以看到Jobs文件夹。右键单击Jobs文件夹,然后选择New Job。 我找不到SQL Server Agent。在哪里可以SQL Server Agent看到?我已经给当前用户所有访问权限。


11
如何在整个MySQL数据库中搜索特定字符串
是否有可能搜索整个数据库表(行和列)以找出特定的字符串。 我有一个约有35个表的名为A的数据库,我需要搜索名为“ hello”的字符串,但我不知道此字符串保存在哪个表上。可以吗? 使用MySQL 我是一名Linux管理员,我对数据库不熟悉,如果您还可以解释该查询,那将非常有帮助。
19 mysql 


5
创建计划指南以缓存(延迟假脱机)CTE结果
我通常会通过首先构造一个使用正确计划的查询,然后将其复制到不使用该计划的类似查询中来创建计划指南。但是,有时这很棘手,尤其是在查询不完全相同的情况下。从头开始创建计划指南的正确方法是什么? SQLKiwi提到了在SSIS中制定计划,是否有一种方法或有用的工具来帮助制定SQL Server的良好计划? 有问题的特定实例是以下CTE:SQLFiddle with cte(guid,other) as ( select newid(),1 union all select newid(),2 union all select newid(),3) select a.guid, a.other, b.guid guidb, b.other otherb from cte a cross join cte b order by a.other, b.other; 有没有任何方法来使结果拿出正好3个不同的guidS和没有更多?我希望将来能够通过将计划指南与CTE类型的查询一起使用来更好地回答问题,这些指南被多次引用以克服某些SQL Server CTE怪癖。
19 sql-server  t-sql  cte 

3
为什么InnoDB不存储行数?
每个人都知道,在使用InnoDB作为引擎的表中,诸如此类SELECT COUNT(*) FROM mytable的查询非常不精确且非常慢,尤其是当表变大并且在执行查询时不断插入/删除行时。 据我了解,InnoDB不会将行数存储在内部变量中,这就是导致此问题的原因。 我的问题是:为什么会这样?存储这样的信息会很难吗?在很多情况下了解这是重要的信息。我看到是否会实现这种内部计数的唯一困难是涉及事务时:如果事务未提交,您是否计算它插入的行? PS:我不是数据库专家,我只是将MySQL作为简单爱好的人。因此,如果我只是问一些愚蠢的问题,请不要过于批评:D。
19 mysql  innodb  count 


3
建议使用innodb_file_per_table吗?
我们有一个应用程序,其中只有一个表将增长到一百万行,而其余表将不足一百万。那么,我们应该使用innodb_file_per_table还是保留一个.ibd的建议呢?我读过一些文章说不要使用它,因为执行连接时需要更多磁盘访问权限?我们将在此表和其他表之间建立联接,以生成报告。
19 mysql  innodb 

5
加强数据库完整性
让应用程序强制执行数据库完整性而不是使用外键,检查约束等是否有意义? 不通过内部数据库工具强制执行数据库完整性,可以期望多少性能改进?

4
SSD上的SQL Server数据库-每个表的单独文件有什么优势?
我正在创建一个数据库,其中大约有30个表,每个表包含数千万行,每个表包含一个重要列和一个主键/主键列,以在面对繁重的情况时最大化查询效率更新和插入,并大量使用聚集索引。其中两个表将包含可变长度的文本数据,其中一个表包含数亿行,而其余表仅包含数字数据。 由于我真的想从我可用的硬件(大约64GB的RAM,一个非常快的SSD和16个内核)中挤出所有性能的下降,所以我在考虑允许每个表都有自己的文件,这样无论我要加入2、3、4、5或更多表,每个表将始终使用单独的线程读取,并且每个文件的结构将与表内容紧密对齐,从而有望最大程度地减少碎片并使其更快使SQL Server添加到任何给定表的内容。 一个警告,我被困在SQL Server 2008 R2 Web Edition上。这意味着我不能使用自动水平分区,这将其排除在性能之外。 是否会在每个表中使用一个文件实际上使性能最大化,或者我是否忽略了使之多余的内置SQL Server引擎特性? 其次,如果每个表使用一个文件是有好处的,为什么create table只给我选择将表分配给文件组而不分配给特定逻辑文件的选项?这将需要我为方案中的每个文件创建一个单独的文件组,这向我暗示SQL Server可能没有想到我所假定的优势将来自于我的建议。

2
当现有索引包括新索引中的所有列时,为什么创建此新索引会大大提高性能?
我有Log和LogItem表;我正在编写查询以从这两者中获取一些数据。有成千上万个Logs,每个Log最多可以有125个LogItems 有问题的查询很复杂,因此我跳过了它(如果有人认为它很重要,可以将其发布),但是当我运行SSMS估计查询计划时,它告诉我一个新的非聚集索引可以将性能提高多达100% 。 Existing Index: Non-clustered Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified Query Plan Recommendation CREATE NONCLUSTERED INDEX [LogReportIndex] ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified]) 只是为了好玩,我创建了这个新索引并运行了查询,令我惊讶的是,现在查询运行大约需要1秒钟的时间,而这才是10秒钟以上。 我以为现有索引可以覆盖这个新查询,所以我的问题是,为什么在新查询中仅使用的列上创建新索引会提高性能?我应该为where子句中使用的每种唯一组合的列都有索引吗? 注意:我不认为这是因为SQL Server正在缓存我的结果,在创建索引之前,我运行查询约25-30次,并且始终花了10-15秒,而在索引之后,索引一直都在〜1或更少。
19 sql-server  index 

9
数据库对象的版本控制
我们的开发人员正在使用的数据库太大(有很多数据库对象)。我们必须控制db对象的更改(更改管理)。我们公司不能只有一个人负责数据库更改。因此,我们需要一个用于数据库对象的安全源,例如用于标准代码的版本控制,但与数据库更相关,可以同步数据库和脚本。什么是最好的。可靠,便宜,实用-选择两个:)

5
SQL:如果不是CPU或IO,什么会减慢INSERT的速度?
我们拥有大量写产品的数据库。我们刚刚购买了带有SSD的新服务器,以提供帮助。令我们惊讶的是,插入速度并不比存储速度慢得多的旧机器快。在基准测试期间,我们注意到SQL Server进程显示的IO速率非常低。 例如,我运行了在此页面上找到的脚本,除了我在循环周围添加了BEGIN TRAN和COMMIT之外。充其量我可以看到磁盘使用率达到7Mb / s,而CPU几乎没有达到5%。该服务器已安装64Gb并正在使用10。总运行时间为首次呼叫2分钟15秒,而后续呼叫大约1分钟。数据库正在简单恢复中,并且在测试期间处于空闲状态。我在每次通话之间都放了桌子。 为什么这么简单的脚本这么慢?几乎根本不使用硬件。专用的磁盘基准测试工具和SQLIO均表明SSD可以正常运行,并且读写速度高达500Mb / s。我知道随机写入比顺序写入要慢,但是我希望像这样的简单插入到没有聚簇索引的表中会更快。 最终,我们的情况要复杂得多,但是我觉得我需要先了解一个简单的案例。简而言之,我们的应用程序删除旧数据,然后使用SqlBulkCopy将新数据复制到临时表中,执行一些过滤,最后根据情况使用MERGE和/或INSERT INTO将数据复制到最终表中。 ->编辑1:我遵循了马丁·史密斯(Martin Smith)链接的过程,得到以下结果: [Wait Type] [Wait Count] [Total Wait (ms)] [T. Resource Wait (ms)] [T. Signal Wait (ms)] NETWORK_IO 5008 46735 46587 148 LOGBUFFER 901 5994 5977 17 PAGELATCH_UP 40 866 865 1 SOS_SCHEDULER_YIELD 53279 219 121 98 WRITELOG 5 …

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.