数据库管理员

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

2
选择所有记录,如果存在联接,则与表A联接,如果不存在,则与表B联接
所以这是我的情况: 我正在为我的一个项目进行本地化,通常我会在C#代码中进行此操作,但是我想在SQL中进行更多操作,因为我想稍微弄点点SQL。 环境:SQL Server 2014 Standard,C#(.NET 4.5.1) 注意:编程语言本身应该无关紧要,为了完整起见,我仅将其包括在内。 所以我完成了我想要的,但是没有达到我想要的程度。自从我完成了JOIN除基本SQL 之外的任何SQL以来,已经有一段时间了(至少一年),这相当复杂JOIN。 这是数据库相关表的示意图。(还有更多,但是这部分不是必需的。) 映像中描述的所有关系都已在数据库中完成- PK和FK约束都已设置和运行。所描述的列均不null可用。所有表都具有架构dbo。 现在,我有一个查询这几乎做什么,我想:即给定任何的标识SupportCategories和任何的标识Languages,这将返回: 如果有合适的,正确的翻译是语言该字符串(即StringKeyId- > StringKeys.Id存在,并在LanguageStringTranslations StringKeyId,LanguageId以及StringTranslationId是否同时存在,那么它的负载StringTranslations.Text为StringTranslationId。 如果LanguageStringTranslations StringKeyId,LanguageId和StringTranslationId组合没有不存在,那么它加载的StringKeys.Name值。该Languages.Id是给定的integer。 我的查询很混乱,如下所示: SELECT CASE WHEN T.x IS NOT NULL THEN T.x ELSE (SELECT CASE WHEN dbo.StringTranslations.Text IS NULL THEN dbo.StringKeys.Name ELSE dbo.StringTranslations.Text END AS Result FROM dbo.SupportCategories INNER JOIN dbo.StringKeys ON …

4
您如何查找未安装SSMS的SQL Server版本/版本?
在未安装Management Studio的情况下如何查找已安装的版本?我有一台服务器,充当另一软件的许可证管理器。在调查内存使用率过高警报时,我发现sqlservr.exe进程占用了将近2 GB的RAM。 我浏览了程序菜单,发现已安装了配置管理器,否则,它几乎是白手起家。我单击了EXE文件的属性,找到了10.50.1600.1,但没有找到表明它是Express,Dev,STN,ENT等的位置。 如果要猜测,这是速成版,但我想知道是否有明显的告示牌。 更新:@Bob-文件告诉我我所知道的,而不是版本。 @valo-运行该命令并确认启用了命名管道时出现以下错误: HResult 0x35,级别16,状态1命名管道提供程序:无法打开与SQL Server [53]的连接。Sqlcmd:错误:Microsoft SQL Server本机客户端10.0:建立与SQL Server的连接时发生了与网络相关或特定于实例的错误。无法找到服务器或无法访问服务器。检查实例名称是否正确,以及是否将SQL Server配置为允许远程连接。有关更多信息,请参见SQL Server联机丛书。Sqlcmd:错误:Microsoft SQL Server本机客户端10.0:登录超时已过期。 @thomas- 在问问题之前,我注意到库存单位名称,但这似乎太容易了,我想我最初的怀疑是正确的。
20 sql-server 

1
转换为数字后,奇怪的SQL Server实例崩溃
使用C#实体框架时,我注意到我的SQL Server实例崩溃了。 我能够将其追溯到以下语句: SELECT * FROM dbo.[TestTable] where mpnr in (1099059904, 1038139906, 1048119902, 1045119902, 1002109903, 1117109910, 1111149902, 1063149902, 1117159902, 1116109904, 1105079905, 1012079906, 1129129904, 1103059905, 1065059905, 1091059906, 1110149904, 1129149903, 1083029905, 1080139904, 1076109903, 1010019902, 1058019902, 1060019903, 1053019902, 1030089902, 1018149902, 1077149902, 1010109901, 1011109901, 1000119902, 1023049903, 1107119909, 1108119909, 1106119909) 该表如下所示: CREATE TABLE dbo.[TestTable]([MPNR] [numeric](9, …

2
是否有每个SQL Server版本的联机操作的完整列表?
当我们即将更改5TB数据库中的一些大表时,我发现自己需要一个可以在线执行的操作的列表,并且这些操作要求在运行时保持完全锁定。理想情况下,该列表还将包含有关哪些语句需要SCH-M锁在最后提交的信息。 虽然我在Microsoft时就了解了其中的大多数知识,但令我感到惊讶的是,由于它们是从SQL Server 2005一直发展到2014 CTP的,因此找不到公开的在线操作列表。 有人有这样的列表吗?如果没有,我可能决定创建它。

5
专栏与字段:我使用这些术语的方式有误吗?
我在这里感到有些尴尬,我一直在完全互换地使用“列”和“字段”这两个术语,最近在技术讨论中引起了一些混乱。 有人告诉我,这是不正确的,应该是正确的(将每个术语转换为电子表格术语,忽略数据类型以及使数据库有用的所有其他内容): 数据库列:类似于电子表格列 数据库记录:就像电子表格行 数据库字段:类似于电子表格“单元格”(特定行的特定列) 这是正确的吗?我可以发誓,列和字段比这更可互换使用。我当然去过。 因此,我们不将字段添加到表中,而是将列添加到表中,并且字段仅在讨论记录中的数据时才相关? 关于列与字段的其他想法? 编辑:澄清一下,当前上下文是MS SQL Server。我在SQL Server之前的背景是MS Access,这可能会影响我对这些术语的使用。

4
执行计划与STATISTICS IO顺序
SQL Server图形执行计划从右到左,从上到下阅读。产生的输出是否有意义SET STATISTICS IO ON? 以下查询: SET STATISTICS IO ON; SELECT * FROM Sales.SalesOrderHeader AS soh JOIN Sales.SalesOrderDetail AS sod ON soh.SalesOrderID = sod.SalesOrderID JOIN Production.Product AS p ON sod.ProductID = p.ProductID; 生成此计划: 并STATISTICS IO输出: Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob …

2
如何使用Windows身份验证使链接服务器正常工作?
我正在尝试使用域环境中的“使用登录名的当前安全上下文制作”来链接到在另一台服务器ServerB上创建的ServerA的链接服务器。我读到我需要为在每个服务器上运行SQL Server的服务帐户创建SPN,以启用Kerberos。我已经做到了,并且现在都显示身份验证方案为Kerberos,但是,我仍然面临错误: "Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'". 在Active Directory中,我可以看到ServerB的服务帐户可以信任用于委派MSSQLSvc,但是我注意到ServerA的服务帐户尚未启用“信任此用户进行委派”。目标服务器是否还需要启用该选项?要使用当前的Windows登录名来使用链接服务器,是否还有其他必要?

4
理解INNODB缓冲池统计信息
阅读完mysql文档中的此页后,我试图弄清当前InnoDB的用法。目前,我们为缓冲池分配了6GB的RAM。我们的数据库大小大致相同。这是show engine innodb status\G(我们正在运行v5.5)的输出 ---------------------- BUFFER POOL AND MEMORY ---------------------- Total memory allocated 6593445888; in additional pool allocated 0 Dictionary memory allocated 1758417 Buffer pool size 393215 Free buffers 853 Database pages 360515 Old database pages 133060 Modified db pages 300 Pending reads 0 Pending writes: LRU 0, flush list …

1
对于相同的模式/查询,MySQL和PostgreSQL之间的性能差异[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我是一名新手DBA,并且我在Microsoft SQL Server中有经验,但是我想跳到FLOSS。 我正在建立一家公司,我们用Postgres后端开发了一个应用程序(PHP),并且还进行了一些与MySQL比较的测试。我们观察到MySQL的速度是PostgreSQL的两倍。 我进行了明显的性能测试: 表中的相同列,具有等效的列数据类型。 行数相同。 两者中的索引相同(包括主键)。 CPU负载处于空闲状态,而Postgres机器则要好得多。 和相同的查询(显然)。 我究竟做错了什么? PS:我阅读了许多有关数据库引擎性能调整的“ howtos”。 PS(2):我们在MySQL数据库上使用InnoDB(每个表一个文件)。 嗨,垫子! 我做了三个常见的选择(也是最难的)查询。 关于磁盘的问题,肯定是不一样的。在Postgres中,它是SSD(快三倍)。 MySQL缓存数据: +------------------------------+----------------------+ | Variable_name | Value | +------------------------------+----------------------+ | binlog_cache_size | 32768 | | have_query_cache | YES | | key_cache_age_threshold | 300 | | key_cache_block_size | 1024 | | key_cache_division_limit …

3
如何通过更新(软件和硬件)为重I / O优化数据库
这种情况 我有一个PostgreSQL 9.2数据库,它一直在大量更新。因此,该系统受I / O限制,我目前正在考虑进行另一次升级,我只需要一些有关从何开始改进的指导。 这是过去三个月情况的图片: 如您所见,更新操作占据了大多数磁盘利用率。这是在更详细的3小时窗口中情况的另一幅图片: 如您所见,峰值写入速率约为20MB / s 软件 服务器正在运行ubuntu 12.04和postgresql 9.2。更新类型通常是在ID标识的各个行上进行小更新。例如UPDATE cars SET price=some_price, updated_at = some_time_stamp WHERE id = some_id。我已经尽可能地删除和优化了索引,并且服务器配置(Linux内核和postgres conf)也都进行了优化。 硬件 硬件是一台专用服务器,在RAID 10阵列中具有32GB ECC ram,4个600GB 15.000 rpm SAS磁盘,由带BBU的LSI RAID控制器和Intel Xeon E3-1245 Quadcore处理器控制。 问题 对于这种口径的系统(读/写),图表显示的性能是否合理? 因此,我应该集中精力进行硬件升级还是对软件进行更深入的研究(内核调整,conf,查询等)? 如果进行硬件升级,磁盘数量是性能的关键吗? ------------------------------更新------------------- ---------------- 我现在已经用四个Intel 520 SSD而不是旧的15k SAS磁盘升级了我的数据库服务器。我正在使用相同的RAID控制器。事情已经大大改善了,从下面的内容可以看出,I / O的峰值性能提高了6到10倍左右-太好了! 但是,根据答案和新SSD的I …

6
计算连续两列或多列超过某个值的位置[篮球,双倍双倍,三倍双倍]
我玩篮球游戏,它允许将其统计信息输出为数据库文件,因此可以从中计算出在游戏中未实现的统计信息。到目前为止,我可以很轻松地计算出我想要的统计数据,但是现在我遇到了一个问题:从一个赛季的比赛统计数据中计算出一个球员本赛季创造的双打和/或双打的数量。 双精度双精度和三重精度双精度的定义如下: 双双: 双打被定义为一种表现,其中玩家在游戏中累积五个统计类别中的两个统计的两位数总数(点,篮板,助攻,抢断和盖帽)。 三双: 三重双打被定义为一种表现,其中玩家在游戏中五个统计类别中的三个统计点(得分,篮板,助攻,抢断和盖帽)中累计两位数。 四重双(为清楚起见添加) 四重双打是指在游戏中,玩家在五个统计类别中的四个统计类别中(得分,篮板,助攻,抢断和盖帽)累计两位数的表现。 “ PlayerGameStats”表存储了玩家玩的每个游戏的统计信息,外观如下: CREATE TABLE PlayerGameStats AS SELECT * FROM ( VALUES ( 1, 1, 1, 'Nuggets', 'Cavaliers', 6, 8, 2, 2, 0 ), ( 2, 1, 2, 'Nuggets', 'Clippers', 15, 7, 0, 1, 3 ), ( 3, 1, 6, 'Nuggets', 'Trailblazers', 11, …

5
PostgreSQL的最佳云平台
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 6年前关闭。 当前,在我们的项目中,我们将专用服务器用于PostgreSQL数据库。 从理论上讲,我们可以在某些云平台上运行任何东西。但是,PostgreSQL配置与硬件配置严格相关。我们正在寻找具有本地PostgreSQL支持的云解决方案。 以下是所需功能的列表: 根据所选资源自动进行数据库配置调整 开箱即用的复制设置 那么,这种服务有哪些选择和最佳选择?
20 postgresql  cloud 


1
更改现有的datadir路径
我想更改文件中的datadir路径my.ini。 现有的datadir路径C:/ProgramData/MySQL/MySQL Server 5.1/Data/ 我的C:驱动器大小为30 GB,MySQL数据文件夹占用25 GB。因此,我想将更datadir改为F:/naveen/data。 这可能吗? 我的机器正在运行Windows Server 2003。

4
从SQL Server检索的数据是否经过压缩以进行传输?
从Microsoft SQL Server检索的数据是否已压缩?如果这是由连接字符串控制的,是否有任何简单的方法来判断是否有任何特定的应用程序正在使用它? 我正在研究分析工具,数据量可能需要几分钟才能通过我们的网络传输。我想知道如果我们从同一远程服务器上的压缩数据存储中提取数据,是否应该期望性能提高。 只要我们关注这个话题,我都会很好奇:数据是以二进制还是ASCII传输的?例如,如果12345从一INT列中查询该值,则将其作为五个字节0x31、0x32、0x33、0x34、0x35传输;该值所需的两个字节;还是该列需要四个字节? 明确地说,我知道有一些选项可以压缩存储数据并进行备份。我在问数据如何传输。

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.