关于为什么向此查询添加排序的任何想法比没有 order by 的返回速度要快得多?我希望相反,那么什么会导致这种情况发生?
SELECT TOP (500) r.cID,r.aField,a.Description
FROM dbo.tblR r
inner join dbo.tblA a on r.aID = a.ID
left join dbo.tblX x on x.cID = r.cID
WHERE (ISNULL(x.anotherField,'') <> r.anotherField or x.field3 is null)
and (r.ID=(select max(ID) from tblR where cID = r.cID and
ISNULL(aField,'') <> ''))
and r.cID in (select ID from tblC)
ORDER BY r.cID ASC -- when I comment this line out it runs much slower
Run Code Online (Sandbox Code Playgroud)
执行计划没有多大帮助。
我需要安装具有全文搜索功能的 SQL server 2005 Express 版本。我不知道下载什么以及安装数据库管理系统的顺序。有人能给我提供下载带有全文搜索的版本的链接吗[因为默认的 38Mb 安装文件没有这个功能]。
还分步说明在安装过程中启用全文搜索。
在 SQL 服务器效率方面哪个更好;使用子查询或连接?
我知道不相关比相关子查询更好。但是连接呢?
使用联接使 SQL 变得更具可读性和可理解性
OUTER JOIN and check for NULLS
Run Code Online (Sandbox Code Playgroud)
但是对于数据库的性能来说是更糟还是更好?
我是我小组的意外 DBA,我继承了一个遵循许多不良做法的数据库。 当前,每个登录都是 sysadmin 组的成员。
确定每个帐户所需的最小权限的最简单方法是什么?我知道我可以使用 SQL Server Profiler 来记录所有执行的 SQL 命令,但它会返回一堆信息。我想不出一种简单的方法来总结所有这些数据。
任何帮助,将不胜感激。
我有一个包含大约 860 列的表的 SQL Server 2005 数据库。除了 ID 列之外,所有其他列都是 varchar(N),其中 N 是 100 或 500。在插入超过 8000 个字符的新行(通过 InfoPath 表单作为前端)时,SQL 服务器返回以下错误:
Cannot create a row of size 11024 which is greater than the allowable maximum of 8060.
Run Code Online (Sandbox Code Playgroud)
据我了解,由于Row Overflow ,这不应该发生。
任何人都可以提供一些有关为什么会发生这种情况的见解吗?
很多时候,我们都听到了同样的事情。关于在哪里放置 OLAP/OLTP 数据库、在哪里放置tempdb、在哪里放置事务日志等的建议。
但是假设您处于存储的物理定义对您来说是个谜的环境中。换句话说,确保您可以看到逻辑驱动器,并且您可以给系统管理员打电话并要求提供更多空间,但您永远不知道什么是不同的物理驱动器(假设在幕后有 SAN 或 NAS)。如果您实际上不知道这一点,那么您如何通过将受到重创的tempdb数据库放在不同的物理驱动器上来遵循最佳实践?
这方面的最佳做法是什么?
我在这里谈论的版本不是版本控制系统。就像在 SO 中一样,我得到了一些可以进行版本控制的文本数据(将它们与问题进行比较)(在编辑、保存、回滚的意义上)。每次编辑、更新、保存的内容都将根据最终用户的选项保存为新版本。我应该如何为这种任务设计一张桌子?
id pk auto increment
content
parentid defaults to 0
version defaults to 0
Run Code Online (Sandbox Code Playgroud)
id content parentid version
1 Hello World 0 0
2 Hello Doggy 1 1
3 Hello Kitty 1 2
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,父 ID 等于现有 ID 的每条记录都将保存在增量版本中(实际上是在服务器端代码中计算的)。显示在 UI 中,如下所示
1.Hello World
-Hello Doggy(Version1)
-Hello Kitty(Version2)
Run Code Online (Sandbox Code Playgroud)
其中每个都显示为链接,以便可以进行进一步的编辑。事情像预期的一样没有问题,但我们想改进这一点,我认为最好从桌子设计开始。
我的客户不小心从测试数据库中删除了一个表的所有记录。此测试数据库位于 SQL Server 2005 Express 中,我们没有备份。
是否可以从事务日志 (.ldf) 文件中恢复已删除的行?如果是,如何?
在 MS SQL Server 2005 中,如何提取给定列的 NULL 分数(或 NULL 计数)的统计信息?
Oracle 和 PostgreSQL 中也有同样的信息,听说 MS SQL 也有统计数据,但不知道在哪里可以找到。谷歌没有多大帮助。
我希望我会听到类似的话
SELECT null_frac FROM pg_stats WHERE tablename='mytab' and attname='mycol';
/* PostgreSQL, stats gathered by ANALYZE */
Run Code Online (Sandbox Code Playgroud)
或者
SELECT nullcnt FROM custom_stats_table WHERE tabname='MYTAB' and colname='MYCOL';
/* Oracle, stats gathered by dbms_stats.get_column_stats */
Run Code Online (Sandbox Code Playgroud)
我不是在问如何自己计算这些值——我知道该怎么做。我需要数千列的这些统计信息,并且在我正在处理的数据库上计算这将花费很长时间。我需要近似值,它们应该在服务器中的某个地方 - 基于成本的优化器无论如何都需要它们。
我正在从一个旧的 web/sql 盒子过渡到一个完全不同的主机上的更强大的解决方案(800hosting 到 RackSpace)。
我们的应用程序对正常运行时间有很高的要求。它 24x7x365 全天候运行并影响数以千计的站点,我希望确保在过渡期间尽可能减少停机时间。(不要问我们现在是如何用一个盒子解决这个问题的。)
我的 Web 服务器计划是一些 DNS 工作,将新的子域指向新的服务器设置,并转发来自现有服务器的请求。这将照顾到足够快地将每个人翻转到新的网络框。问题是数据库 - 我如何保持同步,直到我准备好打开网站上的开关(或者是否值得付出努力,而不是仅仅接受停机来停止应用程序、备份、压缩、传输和恢复?)。
一些细节。我们在旧系统上运行 Sql2k5,在新系统上运行 2k8r2。数据库本身的主数据库约为 30 演出,仓库约为 60 演出。我可以忍受仓库的停机时间,但真的想尽量减少对主数据库的影响。
关于将数据库从旧设置迁移到新设置的最佳方法有什么建议吗?
sql-server-2005 ×10
sql-server ×8
migration ×1
order-by ×1
recovery ×1
statistics ×1
storage ×1
varchar ×1