DISTINCT在下面的例子中添加对查询运行时间有什么影响吗?
有时将其用作提示是否明智?
SELECT *
FROM A
WHERE A.SomeColumn IN (SELECT DISTINCT B.SomeColumn FROM B)
Run Code Online (Sandbox Code Playgroud) 为了更快的报告和性能分析,我们希望将我们的 Web 服务器日志插入到 Sql Server 中。这将使我们能够近乎实时地查看流量模式、问题和减速情况。
我们有一个守护进程,它监听来自负载均衡器的请求/响应事件并批量插入数据库。
但是,我们每天会获得大约 1 GB 的日志,而且我们只需要保留大约一周的时间(至少以这种原始形式)。
存储这些数据的最佳方法是什么,删除旧条目的最佳方法是什么?
我们已经讨论过将每天的数据存储在它自己的表中,例如,Log_2011_04_07将拥有当天的所有条目,然后删除最旧的表。可以创建一个视图来跨越所有日表,以便于查询。可行吗?
我们正在考虑用基于 VSS 的 mdf 和 ldf 文件备份替换传统的 SQL 服务器备份。作为一名 db 人员,我对此感到有些不安,但我找不到任何证据表明这行不通?
任何人都可以建议我可以设置的试验来证明我们可以在哪些地方丢失使用此策略的交易?[在长时间运行的事务期间拔掉电源线是可以的]。
我们正在查看的系统创建 mdf 和 ldf 文件的初始快照,然后跨更改复制。我无法想象这会让我们失望的场景。
希望您能帮助我说服我的老板我们需要保留传统备份!
我将拥有一个 SQL Server 2012 数据库和一个包含 300 万行和 50 列的表。无人值守后台 .net 进程(可能发出一些 SQL 或 Powershell 命令)将其导出到文本文件的最快方法是什么,每行数据一行?.net 进程应该知道导出何时完成或是否有任何错误。数据类型将为 allint或nvarchar。
我假设纯 C# 代码使用 ado.net 执行select *命令并循环遍历数据读取器并为每个记录写入文件会很慢,我无法并行化它。
理想情况下,将导出到远程共享网络文件夹,而不是 SQL Server 计算机上的本地文件夹。SQL Server 将是一个 HA 群集。SSIS 是否更适合于此,不需要数据转换?
.Net 进程将在机器 A 上运行,在机器 B 上运行 SQL Server,最终文件目的地是网络共享。一种选择是 SQL 服务器将文件直接写入网络共享。另一个选项是 SQL Server 写入机器 A,然后在写入文件时,.net 进程将其复制到网络共享。我没有正式的 SLA,但预计文件写入需要 30 分钟 - 1 小时。
我对这个想法进行了一些确认,以修复性能不佳的数据库或更好的建议(如果有人有的话)。始终对更好的建议持开放态度。
我有一个非常大的数据库(20 多万条记录,每天增长约 1/2 百万),它使用 GUID 作为 PK。
我的疏忽,但 PK 聚集在 SQL 服务器上并导致性能问题。
guid 的原因 - 此数据库与 150 个其他数据库部分同步,因此 PK 需要是唯一的。同步不是由 SQL Server 管理的,而是构建了一个自定义过程,使数据保持同步以满足系统的要求——所有这些都基于该 GUID。
150 个远程数据库中的每一个都不存储中央 SQL 数据库中存储的完整数据。他们只存储他们实际需要的数据的一个子集,并且需要的数据对他们来说不是唯一的(150 个数据库中有 10 个可能有一些来自其他站点数据库的相同记录,例如 - 他们共享)。此外 - 数据实际上是在远程站点生成的 - 而不是在中心点 - 因此需要 GUID。
中央数据库不仅用于保持所有内容同步,而且将针对这个非常大的碎片数据库执行来自 3000 多个用户的查询。这在初始测试中已经是一个大问题。
幸运的是,我们还没有上线 - 所以我可以进行更改并在需要时将事情脱机,这至少是一些事情。
远程数据库的性能不是问题 - 数据子集非常小,数据库的总大小通常不会超过 1GB。记录会定期反馈到主系统,并在不再需要时从较小的 BD 中删除。
作为所有记录的管理员的中央数据库的性能是可悲的 - 由于聚集的 GUID 作为许多记录的主键。索引碎片不在图表之列。
所以 - 我解决性能问题的想法是创建一个新列 - Unsigned BIGINT IDENTITY(1,1) 然后更改表 BIGINT 列的 Clustered PK。
我会在作为主键的 GUID 字段上创建一个唯一的非聚集索引。
较小的远程 150 数据库不需要知道中央 SQL Server 数据库上的新 PK …
我正在尝试更改表中的列。现有的表是这样的:
CREATE TABLE [dbo].[table](
[id1] [int] NOT NULL,
[id2] [int] NOT NULL,
[id3] [int] NOT NULL,
[name] [nvarchar](255) NOT NULL,
[id4] [int] NOT NULL,
[xmlData] [xml](CONTENT [dbo].[xml_schema]) NULL,
[booleanData1] [bit] NOT NULL,
[notes] [varchar](4096) NULL,
[id5] [int] NULL,
[booleanData2] [bit] NULL,
[id6] [int] NULL,
CONSTRAINT [PK_table] PRIMARY KEY CLUSTERED
([id1] ASC, [id2] ASC, [id3] ASC)
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
现在我试图在这个表上执行这个 sql:
ALTER TABLE [table] ALTER COLUMN [xmlData] XML
Run Code Online (Sandbox Code Playgroud)
这样我就可以删除 xml 模式并用新的模式替换它。
但我收到此错误:
无法创建大于允许的最大行大小 8060 的大小为 8074 的行。
谁能告诉我这里有什么问题?
我正在研究从 MS SQL 2012 升级到 2014 的好处。SQL 2014 的一大卖点是内存优化表,这显然使查询速度超快。
我发现内存优化表有一些限制,例如:
(max)大小的字段timestamp字段UNIQUE限制这些都属于麻烦事,但如果我真的想解决这些问题以获得性能优势,我可以制定计划。
真正的问题是您无法运行ALTER TABLE语句,并且每次向索引列表添加字段时都必须经历这些繁琐INCLUDE的过程。此外,您似乎必须将用户拒之门外,才能对实时数据库上的 MO 表进行任何架构更改。
我觉得这简直太离谱了,以至于我实际上无法相信 Microsoft 会在此功能上投入如此多的开发资金,却让其维护起来如此不切实际。这使我得出结论,我一定是拿错了棍子的一端;我一定误解了内存优化表的某些内容,这让我相信维护它们比实际困难得多。
那么,我误解了什么?你用过MO表吗?是否有某种秘密开关或过程使它们易于使用和维护?
index sql-server alter-table sql-server-2014 memory-optimized-tables
该EXCEPT运营商已在SQL Server 2005中引入的,但之间有什么区别NOT IN和EXCEPT?
它也这样做吗?我想用一个例子做一个简单的解释。
sql-server-2005 sql-server sql-server-2008-r2 operator except
我有一个典型的例子,参数嗅探导致一个“坏”的执行计划进入计划缓存,导致我的存储过程的后续执行非常缓慢。我可以用局部变量OPTIMIZE FOR ... UNKNOWN、 和来“解决”这个问题OPTION(RECOMPILE)。但是,我也可以深入查询并尝试优化它。
我正在尝试确定我是否应该:鉴于解决问题的时间有限,我想知道不这样做的成本。在我看来,如果我坚持使用OPTION(RECOMPILE),净效果是每次运行查询时都会重新创建查询计划。所以,我想我需要知道:
如何找出创建查询计划的成本是多少?
为了回答我自己的问题,我在谷歌上搜索过(例如使用这个查询),并且我已经浏览了dm_exec_query_statsDMV列的文档 。我还检查了 SSMS 中的“实际查询计划”的输出窗口以找到此信息。最后,我搜索了 DBA.SE。这些都没有得到答案。
谁能告诉我?是否可以找到或测量创建计划所需的时间?
我正在解开一些遗留代码,而且我多年来从未见过这个:
Select *
FROM GLAccounts
INNER JOIN GLCharts
ON glaGLChartID = glcGLChartID
LEFT JOIN GLCategories
ON glcGLCategoryID = gltGLCategoryID
INNER JOIN GLDepartments
ON glaGLDepartmentID = gldGLDepartmentID
INNER JOIN GLDivisions
ON glaGLDivisionID = glvGLDivisionID
,GLFiscalYearPeriods --<this comma>
INNER JOIN GLFiscalYears
ON glfGLFiscalYearID = glzGLFiscalYearID
ORDER BY glcGLCategoryID
,glcParentGLChartID
,glaGLChartID
Run Code Online (Sandbox Code Playgroud)
连接有效,但我没有在 ON 子句的任何 T-SQL 语法参考中找到逗号的这种用法。
这里发生了什么事?TIA
sql-server ×10
alter-table ×1
except ×1
export ×1
index ×1
join ×1
logs ×1
operator ×1
primary-key ×1
t-sql ×1
web-server ×1