我在MS SQL-Server数据库中有以下两个表:
user_info
( user_id PRIMARY KEY,
email,
password
)
Run Code Online (Sandbox Code Playgroud)
和
messages
( time_stamp,
message,
sender,
recipients,
FOREIGN KEY(sender)
REFERENCES user_info (user_id),
FOREIGN KEY(recipients)
REFERENCES user_info (user_id)
)
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以user_id在messages表的收件人字段中存储多个值。我是新手,请帮助我如何解决这个问题。
我的数据库中有一个表,其中有几个简单的列和一个二进制列。该表的主键是一个integer类型。
我面临的问题是自动递增的主键列已达到其最大限制 +2147483647。意味着该表中有大约 20 亿条记录。由于该表中的二进制列,它255 GB在磁盘上有大约大小。
现在,由于该数据类型限制,对该表的所有插入都已停止。逻辑解决方案是我们将该主键列转换为bigint. 但是由于ALTER TABLE命令的大小总是失败,有时甚至数据库进入不一致的状态,我们根本无法访问该表。
使用的语句:
ALTER TABLE table_name ALTER COLUMN id SET DATA TYPE bigint ;
Run Code Online (Sandbox Code Playgroud)
任何人都有任何建议来解决这个问题。
这是现实生活问题的简化版本。GetDate在子选择中使用时,计划更糟且不同。2个查询:
select * , (select count(1)
from hamsfa.customer as sub
where sub.tstamp_nosync > @old
and sub.cus_id > main.cus_id) as x
from hamsfa.customer as main ;
select * , (select count(1)
from hamsfa.customer as sub
where sub.tstamp_nosync > dateadd(year, -100, getdate())
and sub.cus_id > main.cus_id) as x
from hamsfa.customer as main ;
Run Code Online (Sandbox Code Playgroud)
我不完全理解的是为什么。
变量应该按我的理解变差。
还有另一个查询,这导致了几乎 700% 的差异(1s 与 7s)。
所以问题是:为什么一个变量会产生更好的计划,即使根据我的经验它应该更糟?
编辑:统计数据是最新且正确的
我是一名 SQL Server 意外 DBA,他继承了一些数据库,并试图设置基线阈值来监视这些服务器。
有谁知道解决这个问题的好方法?
我希望做的事情如下:我想在每个 SQL Server 实例上捕获不同的指标,这样当我们遇到问题时,我总是可以回到基线并查看它的变化之处。我想以此作为故障排除的起点。
我有一个包含表的数据库:
任务:
PK Name
PK qName
goal
Run Code Online (Sandbox Code Playgroud)公会:
PK Name
PK gName
level
Run Code Online (Sandbox Code Playgroud)游戏:
PK Name
MaxPlayer
levels
uName
Run Code Online (Sandbox Code Playgroud)公会任务:
PK Name
PK gName
PK qName
Run Code Online (Sandbox Code Playgroud)我需要检索包含最多公会的游戏的名称。
公会由游戏分配。
我尝试的查询:
SELECT Name, Count(*) guildName
FROM Game game, Guild guild
WHERE game.Name = Guild.gName
Run Code Online (Sandbox Code Playgroud)
并以某种方式使用 MAX 函数。
我有点困惑如何执行此操作,非常感谢任何帮助。
Microsoft SQL Server 2012 Enterprise 常规数据库(没有 AlwaysOn)是否以任何方式具有自动页面修复功能?
我从下面知道,通过结合 AlwaysOn,辅助副本会收到自动页面修复。只是询问没有 Alwayson 的 SQL Server 数据库是否可以使用此功能?
“每个可用性副本都尝试通过解决某些类型的阻止读取数据页的错误来自动从本地数据库上损坏的页面中恢复。如果次要副本无法读取页面,则副本会从主副本请求页面的新副本。如果主副本无法读取页面,则副本向所有辅助副本广播一个新副本的请求,并从第一个获取页面响应”
两个查询都返回相同的输出:
select COUNT(id) from Employee
select COUNT(All(id)) from Employee
Run Code Online (Sandbox Code Playgroud)
那么SQL-Server 2008R2 有什么不同呢?
我在 SQL Server 2008R2 上的 MSDB SSIS 上的许多文件夹中有许多 SSIS 包。我们正在迁移到新的服务器主机,但仍保留在 SQL Server 2008R2 上。
如何将这些 SSIS 包复制/迁移到新服务器?Dtutil 是最佳选择吗?
当我想将表 A 的列的值限制为仅从表 B 的相关列中的一组可选值中获取时,我遇到了麻烦。
问题是表 B 的相关列不是外键。如果我这样做,我想我可以为不同的列值多次使用相同值的正确状态将是不可能的 - 这不是我寻找的行为。
那么可以做什么呢?
我试图减少我们应用程序数据库上的巨大性能问题。我们使用 SQL Server 2014,我们有很多视图。
我想知道重写左连接以在预测中使用存在是否有重大影响?
我的问题是:在构建根据相关匹配项的存在投射不同数据的查询时,是否有任何有关性能的最佳实践?
我的意思是,这些查询中的哪一个可以被认为更好?
1):
select
a.Id,
case when b.Id is not null
then convert(bit,1)
else convert(bit,0)
end IsActive
from A a
left join B b on a.Id = b.Id;
Run Code Online (Sandbox Code Playgroud)
2):
select
a.Id,
iif(exists(select top 1 1 from B where Id = a.Id),
convert(bit,1),
convert(bit,0)
) IsActive
from A a;
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果您对查询的形式有任何意见或一般性建议,请随时发表评论。