数据库管理员

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


2
该登录名已经有一个使用其他用户名的帐户
当我执行此SQL: USE ASPState GO IF NOT EXISTS(SELECT * FROM sys.sysusers WHERE NAME = 'R2Server\AAOUser') CREATE USER [R2Server\AAOUser] FOR LOGIN [R2Server\AAOUser]; GO 我收到以下错误: 该登录名已经有一个使用其他用户名的帐户。 我怎么知道这个不同的用户名是我的登录帐户?

6
如何在MySQL SELECT子句中将整数转换为布尔值?
我是新来的,所以对我好一点。我有以下情况: 为了简单起见,我有很多表,这些表在MySQL数据库的View中表示。我的问题是,在此视图中我需要一个值来表示它是一种事件还是另一种(简单的布尔值),我尝试通过以下方法实现: `gu`.`StoppingUnitEventME` = `ese`.`MonitoringElement` AS `IsStopingEvent` 结果表示为int,因此由Entity Framework读取。问题是我确实需要一个布尔返回值,我试图通过以下方法实现: CAST((`gu`.`StoppingUnitEventME` = `ese`.`MonitoringElement`) as boolean) AS `IsStopingEvent` 这导致了一个错误,一个在MySQL Workbench中没有显示给我的错误(我只收到令人讨厌的“您在...中有一个错误”)。 你们能帮我吗? 试图在我的应用程序中解决它,但是我真的很想在数据库中解决这个问题,因为稍后它将被其他软件使用。

2
如何仅以毫秒为单位从PostgreSQL获取时间戳列?
我timestamp without time zone default now()在PostgreSQL数据库中有一列“创建”的类型。 如果我选择“ colums”,则默认情况下它的格式很好看: SELECT created FROM mytable; created --------------------------- 2011-05-17 10:40:28.876944 但是我只想以毫秒为单位获取时间戳(以Long为单位)。像这样: 从mytable中选择myformat(创建); created ----------------- 2432432343876944 我怎样才能在几毫秒内从PostgreSQL获取时间戳列? 对杰克的回应: 我确实得到了与您(-3600)相同的区别,但是如果我使用的话,timestamp with time zone我会看到“错误”或区别是因为'1970-01-01'获得了时区+01。 create table my_table_2(created timestamp with time zone); CREATE TABLE insert into my_table_2 (created) values (now()), ('1970-01-01'); INSERT 0 2 select created, extract(epoch from …

4
空间索引可以帮助“范围-限制范围”查询吗
问这个问题,特别是对Postgres,因为它对R树/空间索引有很好的支持。 下表具有单词及其频率的树结构(嵌套集模型): lexikon ------- _id integer PRIMARY KEY word text frequency integer lset integer UNIQUE KEY rset integer UNIQUE KEY 和查询: SELECT word FROM lexikon WHERE lset BETWEEN @Low AND @High ORDER BY frequency DESC LIMIT @N 我认为覆盖索引(lset, frequency, word)会很有用,但如果范围内的lset值过多,我可能会认为效果不佳(@High, @Low)。 (frequency DESC)当使用该索引的搜索提早产生@N与范围条件匹配的行时,使用简单的索引有时也足够了。 但是,性能似乎在很大程度上取决于参数值。 有没有一种方法可以使它快速执行,而不管该范围(@Low, @High)是宽还是窄,以及无论哪个高频字都幸运地处于选定的(狭窄)范围内? R树/空间索引会有所帮助吗? 添加索引,重写查询,重新设计表,没有任何限制。

19
SQL Server Management Studio缓慢打开新窗口
将SQL Server和Management Studio从2008升级到2012后,打开新的查询窗口和对话框时,Management Studio 2012的运行速度非常慢。 即使右键单击表格也很慢。在开始在窗口内执行任何操作之前,通常至少要延迟5秒。即使我连续两次打开同一个窗口,每次也会发生这种情况。为什么会发生这种情况,我该如何解决? 其他应用程序可以非常快速地建立与数据库的连接。 我尝试过的事情没有帮助: 我需要修改hosts文件的Google热门产品 重置SSMS“用户定义的设置” 更新视频驱动程序,关闭硬件加速,禁用DirectX 禁用生物特征认证服务(我没有安装)。 我的计算机应该足够快,而且我还有16GB的RAM。我的硬件绝对应该不是问题。看起来SSMS正在等待某件事-在这种情况下,我可以顺利运行其他程序。 我没有机会安装SQL Server 2012 CU1更新,因为安装修补程序似乎有一些错误的风险,我现在不能冒险。

3
如何为一个列选择不同的列而在另一列中选择任何列?
我需要查询一个SQL数据库以查找一列的所有不同值,并且需要另一列的任意值。例如,考虑具有两列的下表,键和值: key value === ===== one test one another one value two goes two here two also three example 我希望从每个不同的键中取回一个任意选择的示例行,也许可以得到以下三行: key value === ===== one test two goes three example 如何在SQL中制定这样的查询?
29 query 

2
强制PostgreSQL客户端使用SSL?
我已经配置ssl = on了postgresql.conf(并安装了证书等)。这样是否可以确保所有客户端始终通过SSL连接? (就是说,ssl = on如果没有 SSL加密,是否无法连接?) 还有其他方法可以确保所有客户端始终通过SSL / TLS连接吗? 亲切的问候,KajMagnus
29 postgresql 

3
SELECT语句中的OPTION FAST有什么作用?
我对OPTION (FAST XXX)查询提示在SELECT语句中的作用做了一些挖掘,但仍然对此感到困惑。根据MSDN: 指定优化查询以快速检索第一个number_rows。这是一个非负整数。返回第一个number_rows之后,查询将继续执行并产生其完整结果集。 对我来说,这没有多大意义,但基本上查询可以快速获得前XXX行,然后以正常速度获得其余行? 使我对此产生思考的Microsoft Dynamics查询是: select pjproj.project,pjproj.project_desc,pjproj.customer,pjproj.cpnyid from pjproj WITH (NOLOCK) where project like '%' order by project OPTION(FAST 500) 谁能确切解释这个查询提示在做什么,这是不使用它的好处?

3
可以使用循环外键引用\如何避免使用它们?
在外键字段的两个表之间具有循环引用是否可以接受? 如果没有,如何避免这些情况? 如果是这样,如何插入数据? 以下是一个循环引用(在我看来)可以接受的示例: CREATE TABLE Account ( ID INT PRIMARY KEY IDENTITY, Name VARCHAR(50) ) CREATE TABLE Contact ( ID INT PRIMARY KEY IDENTITY, Name VARCHAR(50), AccountID INT FOREIGN KEY REFERENCES Account(ID) ) ALTER TABLE Account ADD PrimaryContactID INT FOREIGN KEY REFERENCES Contact(ID)

3
为什么ANSI SQL将SUM(无行)定义为NULL?
的ANSI SQL标准定义(第6.5章,集功能规范),用于空的结果集的集合函数以下行为: COUNT(...) = 0 AVG(...) = NULL MIN(...) = NULL MAX(...) = NULL SUM(...) = NULL 由于未定义空集的平均值,最小值和最大值,因此对AVG,MIN和MAX返回NULL十分合理。 但是,最后一个让我感到困扰:从数学上来说,空集的SUM是定义明确的:0。使用0 (加法的中性元素)作为基本情况可以使所有内容保持一致: SUM({}) = 0 = 0 SUM({5}) = 5 = 0 + 5 SUM({5, 3}) = 8 = 0 + 5 + 3 SUM({5, NULL}) = NULL = 0 + 5 …

3
为什么建议将BLOB存储在单独的SQL Server表中?
这个备受好评的SO答案建议将图像放在单独的表中,即使与另一个表只有1:1的关系: 如果您决定将图片放入SQL Server表中,我强烈建议使用一个单独的表来存储这些图片-不要将员工照片存储在employee表中-请将它们保存在单独的表中。这样,假设您并不一定总是选择雇员的照片作为查询的一部分,那么Employee表就可以保持精简,卑鄙和高效。 为什么?我的印象是,SQL Server只在表中存储一个指向某些专用BLOB数据结构的指针,所以为什么要手动创建另一个间接层呢?它真的可以显着提高性能吗?如果是,为什么?
28 sql-server  blob 

4
SSD是否会降低数据库的实用性
我今天只听说过罗伯特·马丁(Robert Martin),看来他是软件界的佼佼者,所以我的意思不是要让我的头衔看起来像是点击诱饵,或者是我在他口中吐槽,但这仅仅是我以有限的经验和理解来解释我从他那里听到的信息。 我今天正在观看视频(关于软件体系结构),在Robert C. Martin的演讲中,在视频的后半部分,数据库主题是主要焦点。 根据我对他所说内容的理解,似乎他在说固态硬盘会降低数据库的实用性(相当可观)。 要解释我是如何进行这种解释的: 他讨论了使用HDD /旋转磁盘如何缓慢地检索数据。但是,这些天我们使用SSD。他以“ RAM即将到来”开始,然后继续提及RAM磁盘,但随后说他不能称其为RAM磁盘,因此只能说RAM。因此对于RAM,我们不需要索引,因为每个字节花费相同的时间来获取。(本段由我解释) 因此,他建议使用RAM(例如计算机内存中的内存)来代替数据库(因为这就是我解释他的声明的意思)没有任何意义,因为这就像说所有记录在应用程序的生命周期内都是在内存中处理的(除非您根据需要从磁盘文件中提取) 因此,我求助于RAM,他的意思是SSD。因此,在那种情况下,他说固态硬盘会降低数据库的实用性。他甚至说:“如果我是Oracle,我会感到害怕。我之所以存在的根本基础正在消失。” 从我对SSD的了解很少,不像HDD那样需要O(n)寻道时间(我认为),SSD接近O(1)或几乎是随机的。因此,他的建议对我来说很有趣,因为我从未想过。几年前,当我第一次被介绍给数据库时,一位教授描述了常规文件系统所没有的好处,我得出结论,数据库的主要作用本质上是一个索引很高的文件系统(以及优化,缓存,并发访问,等等),因此,如果SSD中不需要索引,这种方法会使数据库的使用率降低。 不管怎么说,以我是新手开头,我很难相信它们变得没有用,因为每个人仍然使用DBs作为其应用程序的主要观点,而不是纯文件系统,并且觉得他过于简化了。数据库的作用。 注意:我一直观察到最后,以确保他没有说不同的话。 供参考:42 : 22是整个数据库主题出现的时间, 43:52是他以“为什么还要拥有数据库”开始的时间 这个答案确实表明SSD大大提高了DB的速度。 此问题询问如何更改优化。 对于TL; DR,我的问题是,服务器市场上广泛使用SSD的出现(无论即将到来还是已经发生)是否会降低数据库的实用性? 似乎演示者试图传达的是,使用SSD,人们可以将数据存储在磁盘上,而不必担心像旧版HDD以及SSD一样检索数据的速度会很慢。O(1)(我认为)。因此,如果这是真的,那么假设会失去它的优势之一:建立索引,因为拥有索引以缩短查找时间的优势已荡然无存。

2
如果为正,则对所有项目求和。如果为负,则返回每个
我需要找到SUM()所有正值的方法,num并返回SUM()所有正数的值,并为每个负数返回单独的一行。下面是一个示例DDL: Create Table #Be ( id int , salesid int , num decimal(16,4) ) Insert Into #BE Values (1, 1, 12.32), (2, 1, -13.00), (3, 1, 14.00) , (4, 2, 12.12), (5, 2, 14.00), (6, 2, 21.23) , (7, 3, -12.32), (8,3, -43.23), (9, 3, -2.32) 这是我想要的输出(每个salesid SUM()和负数的正数返回单独的行): salesid num …

3
MongoDB使用太多内存
我们已经使用MongoDB已有几周了,我们看到的总体趋势是mongodb使用了太多的内存(远远超过了其数据集+索引的总大小)。 我已经阅读了这个问题和这个问题,但是似乎没有一个解决我所面临的问题,他们实际上是在解释文档中已经解释的内容。 以下是htop和show dbs命令的结果。 我知道mongodb使用内存映射的IO,因此基本上OS会处理内存中的缓存内容,并且从理论上讲,当另一个进程请求可用内存时,mongodb 应该释放其缓存的内存,但是从我们的观察来看,它不是。 OOM开始杀死其他重要进程,例如postgres,redis等。(可以看到,为解决此问题,我们将RAM增加到183GB,现在可以使用,但价格昂贵。mongo使用了约87GB的ram,几乎是整个数据集大小的4倍) 所以, 这样的内存使用量真的是正常的吗?(根据文档,WiredTiger最多将〜60%的RAM用于其缓存,但是考虑到数据集的大小,它甚至没有足够的数据量来占用86GB的RAM吗?) 即使预期内存使用量,在另一个进程开始请求更多内存的情况下,mongo为什么也不会放开分配的内存?在我们增加RAM并使系统完全不稳定之前,Linux oom不断将各种其他正在运行的进程(包括mongodb本身)杀死。 谢谢 !

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.