Questions tagged «query-performance»

有关改善数据库查询的性能和/或效率的问题。

4
在查询中的多个列上调用同一个表值函数的最有效方法
我正在尝试优化一个查询,其中在20列上调用了相同的表值函数(TVF)。 我所做的第一件事是将标量函数转换为内联表值函数。 是否使用CROSS APPLY最佳执行方式对查询中的多个列执行相同的功能? 一个简单的例子: SELECT Col1 = A.val ,Col2 = B.val ,Col3 = C.val --do the same for other 17 columns ,Col21 ,Col22 ,Col23 FROM t CROSS APPLY dbo.function1(Col1) A CROSS APPLY dbo.function1(Col2) B CROSS APPLY dbo.function1(Col3) C --do the same for other 17 columns 有更好的选择吗? 可以在针对X个列的多个查询中调用同一函数。 功能如下: CREATE …

1
100%CPU的执行计划不正确
由于特定查询使用了错误的执行计划,我遇到了100%CPU峰值的严重问题。我现在花了数周时间自行解决。 我的资料库 我的样本数据库包含3个简化表。 [数据记录仪] CREATE TABLE [model].[DataLogger]( [ID] [bigint] IDENTITY(1,1) NOT NULL, [ProjectID] [bigint] NULL, CONSTRAINT [PK_DataLogger] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] [变频器] CREATE TABLE [model].[Inverter]( [ID] [bigint] IDENTITY(1,1) NOT NULL, [SerialNumber] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Inverter] …

5
使用窗口功能优化子查询
由于我的性能调优技能似乎永远不足,我一直想知道是否可以针对某些查询执行更多优化。这个问题涉及的情况是嵌套在子查询中的Windowed MAX函数。 我正在挖掘的数据是在较大组的各个不同组上的一系列事务。我有4个重要字段,一个事务的唯一ID,一批事务的Group ID以及与相应的唯一事务或一组事务相关的日期。多数情况下,组日期与批次的最大唯一交易日期相匹配,但是有时会通过我们的系统进行手动调整,并且在捕获组交易日期之后会进行唯一日期操作。此手动编辑不会通过设计来调整组日期。 我在此查询中识别的是那些唯一日期落在组日期之后的记录。以下示例查询建立了与我的场景大致相当的内容,并且SELECT语句返回了我要查找的记录,但是,我是否以最有效的方式来实现此解决方案?在我的事实表加载期间,这需要花一些时间,因为我的记录计数前9位数字,但是主要是我对子查询的鄙视使我怀疑这里是否有更好的方法。我不太担心任何索引,因为我相信它们已经存在。我正在寻找的是一种替代查询方法,该方法可以实现相同的功能,但效率更高。欢迎任何反馈。 CREATE TABLE #Example ( UniqueID INT IDENTITY(1,1) , GroupID INT , GroupDate DATETIME , UniqueDate DATETIME ) CREATE CLUSTERED INDEX [CX_1] ON [#Example] ( [UniqueID] ASC ) SET NOCOUNT ON --Populate some test data DECLARE @i INT = 0, @j INT = 5, @UniqueDate DATETIME, …

4
如何处理500M +项目的查询
我的数据结构如下: date: <timestamp> filter_a: <integer> -> range [0, 1000] filter_b: <integer> -> range [0, 1000] filter_c: <integer> -> range [0, 86400] filter_d: <integer> -> range [0, 6] group: <string> second_group: <integer> variable_a: <float> variable_b: <float> variable_c: <float> a couple more no very important 我需要执行以下查询: 第一: 通过筛选数据date,filter_a,filter_b,filter_c和其他人 其次,用过滤后的数据: 计算所有记录 得到平均的variable_a,variable_b并variable_c 得到标准差的variable_a,variable_b并variable_c …

3
一个用户对sys.schemas和sys.synonyms的查询运行非常慢
方案:SQL Server 2014(v12.0.4100.1) .NET服务运行以下查询: SELECT name, base_object_name FROM sys.synonyms WHERE schema_id IN (SELECT schema_id FROM sys.schemas WHERE name = N'XXXX') ORDER BY name ...返回约6500行,但通常会在3分钟后超时。的XXXX上面是不 “DBO”。 如果我以UserA身份在SSMS中运行此查询,则查询将在不到一秒钟的时间内返回。 当以UserB身份运行(这是.NET服务的连接方式)时,查询需要3到6 分钟的时间,并且整个时间的CPU%占25%(4核)。 UserA是sysadmin角色中的域登录名。 UserB是具有以下内容的SQL登录名: EXEC sp_addrolemember N'db_datareader', N'UserB' EXEC sp_addrolemember N'db_datawriter', N'UserB' EXEC sp_addrolemember N'db_ddladmin', N'UserB' GRANT EXECUTE TO [UserB] GRANT CREATE SCHEMA TO …

1
在这种情况下,表变量如何提高查询性能?
对于这种特定情况,我将在下面尝试说明,使用表变量比不使用表变量要好。 我想知道为什么,如果可能的话,摆脱表变量。 这是使用表变量的查询: USE [BISource_UAT] GO set statistics io on SET STATISTICS TIME ON SET NOCOUNT ON; DECLARE @OrderStartDate DATETIME = '15-feb-2015' DECLARE @OrderEndDate DATETIME = '28-feb-2016' DECLARE @tmp TABLE ( strBxOrderNo VARCHAR(20) ,sintReturnId INT ) INSERT INTO @tmp SELECT strBxOrderNo ,sintReturnId FROM TABLEBACKUPS.dbo.tblBReturnHistory rh WHERE rh.sintReturnStatusId in ( 3 …

1
SQL Server,TOP与ROW_NUMBER
我正在学习执行计划,并尝试不同的查询并比较它们的性能,结果发现: SELECT StatisticID FROM ( SELECT StatisticID, ROW_NUMBER() OVER (ORDER BY StatisticID) AS rn FROM FTCatalog.Statistic ) AS T WHERE T.rn <= 1000 ORDER BY rn SELECT TOP 1000 StatisticID FROM FTCatalog.Statistic ORDER BY StatisticID 它们都返回相同的结果集-但是第一个执行速度更快,资源占用更少(至少SSMS告诉我),以下是执行计划: 与SQL Query Plan Explorer的比较: 谁能给我一些有关幕后实际发生情况的信息,以及为什么结果有所不同?如果您还有其他需要,请告诉我。 谢谢,伊瓦达斯。

1
与单独的SELECT相比,在OR条件下索引查找要慢得多
根据这些问题和给出的答案: SQL 2008 Server-性能损失可能与非常大的表有关 具有历史数据的大表分配了过多的SQL Server 2008 Std。内存-其他数据库的性能损失 我在数据库SupervisionP中有一个表,定义如下: CREATE TABLE [dbo].[PenData]( [IDUkazatel] [smallint] NOT NULL, [Cas] [datetime2](0) NOT NULL, [Hodnota] [real] NULL, [HodnotaMax] [real] NULL, [HodnotaMin] [real] NULL, CONSTRAINT [PK_Data] PRIMARY KEY CLUSTERED ( [IDUkazatel] ASC, [Cas] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS …

2
与SQL Server中的派生表相比,使用临时表是否有优势?
我读到派生表比临时表具有更好的性能,但是无论如何,许多SQL Server开发人员都喜欢第二个表。为什么?我必须对大数据(数百万条记录)进行查询,并且我想确保使用的是最佳选择。 CREATE TABLE A( id BIGINT IDENTITY(1,1) NOT NULL, field1 INT NOT NULL, field2 VARCHAR(50) NULL, ); CREATE TABLE B( id INT IDENTITY(1,1) NOT NULL, field1 VARCHAR(10) NULL, field2 INT NULL ); INSERT INTO A (field1,field2) VALUES (1,'a'),(2,'b'),(3,'c'),(2,'d'),(5,'e'), (6,'f'),(7,'g'),(8,'h'),(9,'i'),(2,'j'); INSERT INTO B (field1,field2) VALUES ('a',1),('b',2),('c',3),('d',4),('e',5), ('f',6),('g',7),('h',8),('i',9),('j',2),('k',3); DECLARE @begin INT=0,@end …

2
使用MAX分组,而不是MAX
我是一名程序员,正在处理一个具有以下方案的大表: UpdateTime, PK, datetime, notnull Name, PK, char(14), notnull TheData, float 上有一个聚集索引 Name, UpdateTime 我想知道什么应该更快: SELECT MAX(UpdateTime) FROM [MyTable] 要么 SELECT MAX([UpdateTime]) AS value from ( SELECT [UpdateTime] FROM [MyTable] group by [UpdateTime] ) as t 此表的插入是50,000行中具有相同日期的数据块。因此,我认为分组依据可能会简化MAX计算。 与其尝试查找最多150,000行,不如将其分组为3行,然后计算MAX会更快?我的假设是正确的还是分组依据也代价高昂?

1
估计行与实际行之间的差异(实际比估计的要小得多)-排序
我正在运行一个查询,该查询正在处理XML文档中的某些节点。我估计的子树成本为数百万美元,这似乎全部来自sql服务器对我通过XPath从xml列提取的某些数据执行的排序操作。排序操作估计的行数约为1900万,而实际的行数约为800。查询本身运行得很好(1-2秒),但是差异让我想知道查询性能以及为什么这样做相差这么大?

3
我可以在执行计划窗格中让SSMS向我显示实际查询费用吗?
我正在解决SQL Server中多语句存储过程的性能问题。我想知道应该在哪一部分上花费时间。 我从如何阅读查询费用中了解到,它始终是百分比吗?即使SSMS被告知包括实际执行计划,“查询成本(相对于批次)”数字仍基于成本估算,这可能与实际情况相去甚远 从测量查询性能中可以了解到:“执行计划查询成本” vs“花费时间”,我可以用SET STATISTICS TIME语句围绕存储过程的调用,然后在Messages窗格中获得如下列表: SQL Server parse and compile time: CPU time = 0 ms, elapsed time = 1 ms. SQL Server Execution Times: CPU time = 0 ms, elapsed time = 0 ms. [etc] SQL Server Execution Times: CPU time = 187 ms, elapsed time = …

1
sql server中的持续时间测量实际测量什么?
进行探查器跟踪时,查询持续时间究竟能测量什么? 我有一个执行数据访问(SELECT)的存储过程,平均大约需要30秒才能将结果返回给应用程序。但是当我对其进行跟踪时,我得到的平均持续时间约为8秒,最大持续时间为12秒,平均CPU时间为5.5秒。 是什么导致返回结果集花费更长的时间呢?我没有累积大量的NETWORKIO等待。结果集仅包含约270行的简单文本数据,总计约50列。

2
学习优化SQL查询和理解执行计划-资源?
我发现自己在工作中编写越来越多的SQL查询(大多数是Oracle 11g,但有些是SQL Server 2005-2008),并且已经开始为分析师团队的其他成员创建一些非常复杂的视图。 它们大多数都运行得很好,但是其中一些并不那么好。所以... 我如何学习调整查询? 我需要学习阅读或执行执行计划吗? 和... 您可以推荐哪些书/网站以了解有关SQL查询调优1)概述2)专门针对Oracle 11g的内容? 我们这里有一些不错的DBA,但是它们被淹没了,无法帮助我们调整我们编写的每个查询。 我在Amazon for Oracle上找到的大多数书籍似乎都是针对整体数据库优化的,并且/或者是在8到10年前写的。 谢谢您的建议:)


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.