数据库管理员

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

3
执行计划基础-哈希匹配混乱
我开始学习执行计划,并对哈希匹配的工作原理以及为什么在简单的联接中使用它感到困惑: select Posts.Title, Users.DisplayName From Posts JOIN Users on Posts.OwnerUserId = Users.Id OPTION (MAXDOP 1) 据我了解,顶部索引扫描的结果变为具有哈希功能,并且底部索引群集扫描的每一行都被查找。我了解哈希表至少在某种程度上是如何工作的,但是在这样的示例中,我对哪些值确切地被哈希感到困惑。 对我来说有意义的是,它们之间的公共字段id被散列了-但是,如果是这种情况,为什么还要散列一个数字呢?

6
为什么在我的测试案例中,顺序的GUID密钥比顺序的INT密钥执行得更快?
询问后这个问题比较顺序和非顺序的GUID,我试图表与顺序初始化的GUID主键比较上1 INSERT性能)newsequentialid(),和2)的表与INT主键与顺序初始化identity(1,1)。我希望后者是最快的,因为整数的宽度较小,并且生成顺序整数比顺序GUID似乎也更简单。但是令我惊讶的是,带有整数键的表上的INSERT显着慢于顺序GUID表。 这显示了测试运行的平均时间使用量(毫秒): NEWSEQUENTIALID() 1977 IDENTITY() 2223 谁能解释一下? 使用了以下实验: SET NOCOUNT ON CREATE TABLE TestGuid2 (Id UNIQUEIDENTIFIER NOT NULL DEFAULT NEWSEQUENTIALID() PRIMARY KEY, SomeDate DATETIME, batchNumber BIGINT, FILLER CHAR(100)) CREATE TABLE TestInt (Id Int NOT NULL identity(1,1) PRIMARY KEY, SomeDate DATETIME, batchNumber BIGINT, FILLER CHAR(100)) DECLARE @BatchCounter INT = 1 …


5
您如何调整MySQL以处理繁重的InnoDB工作负载?
假设生产OLTP系统主要包含InnoDB表 错误/配置错误的系统的常见症状是什么? 您最常更改哪些配置参数的默认值? 在出现问题之前,您如何发现潜在的瓶颈? 您如何识别和解决活动中的问题? 任何详述特定status变量和诊断的轶事都将不胜感激。

3
非聚集索引在堆上的性能与聚集索引的性能
该2007年白皮书比较了在作为聚簇索引组织的表上与在与CI相同的关键列具有非聚簇索引的组织为堆的表上的单个选择/插入/删除/更新和范围选择语句的性能表。 通常,聚簇索引选项在测试中表现更好,因为只需要维护一种结构,并且因为不需要书签查找。 本文未涉及的一个可能有趣的案例是,堆上的非聚簇索引与聚簇索引上的非聚簇索引之间的比较。在那种情况下,我希望堆甚至可以在NCI叶级别上表现更好,因为SQL Server具有直接遵循的RID,而不需要遍历聚集索引。 是否有人知道在这一领域已经进行过类似的正式测试,如果是的话,结果是什么?


4
在SSMS 2012中格式化T-SQL
根据此Microsoft文档: http://msdn.microsoft.com/en-us/library/ms174205.aspx 我应该能够使用ctrl + K,然后再使用ctrl + D在SQL Server Management Studio 2012中格式化我的SQL文档,但是当我使用该组合时,出现错误: 组合键(Ctrl + K,Ctrl + D)绑定到当前不可用的命令(格式化文档)。 我正在尝试对根本没有格式的现有SQL文档进行修改,这使得阅读起来极为困难。有谁知道如何使“格式文档”命令可用,以便我可以用SQL格式化此代码?
39 sql-server  ssms 

2
配置PostgreSQL以获得读取性能
我们的系统写入大量数据(类似于大数据系统)。写入性能足以满足我们的需求,但读取性能确实太慢。 我们所有表的主键(约束)结构相似: timestamp(Timestamp) ; index(smallint) ; key(integer). 一个表可以具有数百万行,甚至数十亿行,并且读取请求通常针对特定时间段(时间戳/索引)和标签。查询返回大约200k行是很常见的。目前,我们每秒可以读取1.5万行,但我们需要提高10倍。这可能吗?如果可以,怎么办? 注意: PostgreSQL与我们的软件打包在一起,因此每个客户端的硬件有所不同。 它是用于测试的VM。VM的主机是Windows Server 2008 R2 x64,具有24.0 GB的RAM。 服务器规格(虚拟机VMWare) Server 2008 R2 x64 2.00 GB of memory Intel Xeon W3520 @ 2.67GHz (2 cores) postgresql.conf 优化 shared_buffers = 512MB (default: 32MB) effective_cache_size = 1024MB (default: 128MB) checkpoint_segment = 32 (default: 3) checkpoint_completion_target …

1
SELECT INTO表查询的WHERE 1 = 2的意义是什么
如果要从SQL Server中的现有表创建新表,可以执行以下操作 SELECT * into Table2 from Table1 WHERE 1=2 where子句的意义是什么?我尝试了没有where子句的情况,并且运行良好。我在互联网上的许多示例中都看到过where子句,但没有看到为什么需要它的原因。
39 sql-server 


4
在索引中包含列的硬性和快速性规则
是否有任何硬性规定来决定应将哪些列以及应以什么顺序放入非聚集索引中。我只是在阅读这篇文章https://stackoverflow.com/questions/1307990/why-use-the-include-clause-when-creating-an-index ,我发现对于以下查询: SELECT EmployeeID, DepartmentID, LastName FROM Employee WHERE DepartmentID = 5 张贴者建议制作这样的索引: CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee(EmployeeID, DepartmentID) INCLUDE (Lastname) 这是我的问题,为什么我们不能像这样做索引 CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee( EmployeeID, DepartmentID, LastName) 要么 CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee( EmployeeID, LastName) INCLUDE (DepartmentID) 什么原因导致发布者决定保留“姓氏”列。为什么不另列?以及如何决定应以什么顺序将列保留在那里?

6
在MySQL中,WHERE子句中列的顺序会影响查询性能吗?
我在某些具有较大可能结果集的数据库查询中遇到性能问题。 有问题的查询,我AND在WHERE子句中有三个 条款的顺序重要吗? 与之类似,如果我将ASI_EVENT_TIME子句放在第一位(因为这样会从所有子句中删除大部分结果。 这会改善查询的运行时间吗? 查询: SELECT DISTINCT activity_seismo_info.* FROM `activity_seismo_info` WHERE activity_seismo_info.ASI_ACTIVITY_ID IS NOT NULL AND activity_seismo_info.ASI_SEISMO_ID IN (43,44,...,259) AND ( activity_seismo_info.ASI_EVENT_TIME>='2011-03-10 00:00:00' AND activity_seismo_info.ASI_EVENT_TIME<='2011-03-17 23:59:59' ) ORDER BY activity_seismo_info.ASI_EVENT_TIME DESC 查询说明: +----+-------------+---------+-------+---------------------------+--------------+---------+------+-------+-----------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref …

4
在专用数据库服务器上,要为操作系统保留多少内存?
假设您有专门用于数据库功能的专用服务器- 您应该为操作系统保留多少内存? 我意识到这可能会有所不同,具体取决于特定的OS,特定的数据库软件等。但是,由于内存对数据库性能非常重要,因此我希望数据库具有最大合理的内存级别,而又不会使主机OS饿死。 所以 首先有什么好的经验法则? 我们应该查看哪些计数器或性能指标来确定我们是否走得太远并且数据库是否因某种原因使主机操作系统处于饥饿状态?

6
如何对服务器上的所有数据库执行SQL
我在单个服务器上针对多个数据库运行一些标准SQL,以帮助我诊断问题: select so.name, so.type, MAX(case when sc.text like '%remote%' then '' ELSE 'N' END) AS Relevant, @@ServerName as Server, DB_Name() as DBName from sysobjects so with (nolock) join syscomments sc with (nolock) on so.id = sc.id where (sc.text like '%emote%') group by so.name, so.type order by so.type, so.name 如何在单个服务器上对所有数据库执行此操作?(除了手动连接到一个并执行)
38 sql-server 


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.