Questions tagged «query-performance»

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

2
检索日期范围的最有效方法
用这种表结构检索日期范围的最有效方法是什么? create table SomeDateTable ( id int identity(1, 1) not null, StartDate datetime not null, EndDate datetime not null ) go 假设您要同时为StartDate和设置一个范围EndDate。因此,换句话说,如果StartDate介于@StartDateBegin和之间@StartDateEnd,并且EndDate介于@EndDateBegin和之间@EndDateEnd,则执行某些操作。 我知道有几种方法可以解决此问题,但是最建议的是什么?

2
如何加快选择特色?
我对某些时间序列数据有一个简单的选择: SELECT DISTINCT user_id FROM events WHERE project_id = 6 AND time > '2015-01-11 8:00:00' AND time < '2015-02-10 8:00:00'; 而且需要112秒。这是查询计划: http://explain.depesz.com/s/NTyA 我的应用程序必须执行许多不同的操作,并像这样计数。有没有更快的方法来获取此类数据?

3
消除会降低性能的键查找(集群)运算符
如何在执行计划中消除键查找(集群)运算符? 表tblQuotes已经有一个聚集索引(QuoteID)和27个非聚集索引,因此我尝试不再创建任何索引。 我QuoteID在查询中放入了聚集索引列,希望对您有所帮助-但不幸的是还是一样。 执行计划在这里。 或查看它: 这就是“关键点查找”运算符所说的: 查询: declare @EffDateFrom datetime ='2017-02-01', @EffDateTo datetime ='2017-08-28' SET NOCOUNT ON SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED IF OBJECT_ID('tempdb..#Data') IS NOT NULL DROP TABLE #Data CREATE TABLE #Data ( QuoteID int NOT NULL, --clustered index [EffectiveDate] [datetime] NULL, --not indexed [Submitted] [int] NULL, [Quoted] …


1
与日期比较的子查询效果不佳
当使用子查询查找具有匹配字段的所有先前记录的总数时,在只有5万条记录的表上,性能会很糟糕。没有子查询,查询将在几毫秒内执行。使用子查询,执行时间超过一分钟。 对于此查询,结果必须: 仅包括给定日期范围内的那些记录。 包括所有先前记录的计数,不包括当前记录,无论日期范围如何。 基本表架构 Activity ====================== Id int Identifier Address varchar(25) ActionDate datetime2 Process varchar(50) -- 7 other columns 示例数据 Id Address ActionDate (Time part excluded for simplicity) =========================== 99 000 2017-05-30 98 111 2017-05-30 97 000 2017-05-29 96 000 2017-05-28 95 111 2017-05-19 94 222 2017-05-30 预期成绩 对于日期范围2017-05-29,以2017-05-30 …

2
加入查询需要11分钟才能在300,000行表上运行
下面的查询需要花费超过11分钟的时间来执行。 SELECT `c`.*, `e`.`name` AS `employee_name`, `e`.`emp_no`, `d`.`code` AS `department_code`, IF(ew.code IS NOT NULL, ew.code, egw.code) AS shift_code, IF(ew.code IS NOT NULL, ew.time_in_from, egw.time_in_from) AS time_in_from, IF(ew.code IS NOT NULL, ew.time_out_to, egw.time_out_to) AS time_out_to, IF(ew.code IS NOT NULL, ew.next_day, egw.next_day) AS next_day FROM `tms_emp_badge_card` AS `c` LEFT JOIN `tms_door_record_raw` AS …

3
为什么我的EXISTS查询执行索引扫描而不是索引查找?
我正在优化一些查询。 对于以下查询, SET STATISTICS IO ON; DECLARE @OrderStartDate DATETIME2 = '27 feb 2016'; DECLARE @OrderEndDate DATETIME2 = '28 feb 2016'; SELECT o.strBxOrderNo , o.sintOrderStatusID , o.sintOrderChannelID , o.sintOrderTypeID , o.sdtmOrdCreated , o.sintMarketID , o.strOrderKey , o.strOfferCode , o.strCurrencyCode , o.decBCShipFullPrice , o.decBCShipFinal , o.decBCShipTax , o.decBCTotalAmount , o.decWrittenTotalAmount , o.decBCWrittenTotalAmount …

1
sp_cursoropen和并行性
我遇到了一个查询似乎无法解决的性能问题。 我从游标定义中拉出了查询。 该查询需要几秒钟才能执行 SELECT A.JOBTYPE FROM PRODROUTEJOB A WHERE ((A.DATAAREAID=N'IW') AND ((A.CALCTIMEHOURS<>0) AND (A.JOBTYPE<>3))) AND EXISTS (SELECT 'X' FROM PRODROUTE B WHERE ((B.DATAAREAID=N'IW') AND (((((B.PRODID=A.PRODID) AND ((B.PROPERTYID=N'PR1526157') OR (B.PRODID=N'PR1526157'))) AND (B.OPRNUM=A.OPRNUM)) AND (B.OPRPRIORITY=A.OPRPRIORITY)) AND (B.OPRID=N'GRIJZEN'))) AND NOT EXISTS (SELECT 'X' FROM ADUSHOPFLOORROUTE C WHERE ((C.DATAAREAID=N'IW') AND ((((((C.WRKCTRID=A.WRKCTRID) AND (C.PRODID=B.PRODID)) AND …

3
具有WHERE条件和GROUP BY的SQL查询的索引
我试图确定要用于带有WHERE条件的SQL查询的索引,GROUP BY而当前正在运行的索引非常慢。 我的查询: SELECT group_id FROM counter WHERE ts between timestamp '2014-03-02 00:00:00.0' and timestamp '2014-03-05 12:00:00.0' GROUP BY group_id 该表当前有32.000.000行。当我增加时间范围时,查询的执行时间会增加很多。 有问题的表如下所示: CREATE TABLE counter ( id bigserial PRIMARY KEY , ts timestamp NOT NULL , group_id bigint NOT NULL ); 我目前有以下索引,但是性能仍然很慢: CREATE INDEX ts_index ON counter USING btree (ts); …

1
SQL Server如何知道谓词之间的关联?
在诊断基数估计不佳(尽管索引简单,统计信息最新等)并因此查询计划不佳的SQL Server 2008 R2查询时,我发现了一个可能相关的知识库文章: FIX:运行查询时性能不佳包含SQL Server 2008或SQL Server 2008 R2或SQL Server 2012中的关联AND谓词 我可以猜测知识库文章“关联”的含义,例如谓词2和谓词1主要针对相同的行。 但是我不知道SQL Server如何知道这些相关性。一个表是否需要一个包含来自两个谓词的列的多列索引?SQL是否使用统计信息来检查一列中的值是否与另一列相关?还是使用其他方法? 我问这个有两个原因: 确定使用此修补程序可以改善我的表和查询 知道我应该在索引编制,统计数据等方面做些什么来影响#1

5
如何在大表上使用LEFT JOIN优化非常慢的SELECT
我正在谷歌搜索,自我教育和寻找解决方案数小时,但没有运气。我在这里找到了一些类似的问题,但不是这种情况。 我的桌子: 人(约1000万行) 属性(位置,年龄,...) 人与属性之间的链接(M:M)(约4000万行) 完整转储〜280MB 情况: 我尝试person_id从某些位置(location.attribute_value BETWEEN 3000 AND 7000),性别(gender.attribute_value = 1),出生年份(bornyear.attribute_value BETWEEN 1980 AND 2000)和眼睛颜色(eyecolor.attribute_value IN (2,3))选择所有人的身份()。 这是我的询问女巫用了3〜4 分钟。我想优化: SELECT person_id FROM person LEFT JOIN attribute location ON location.attribute_type_id = 1 AND location.person_id = person.person_id LEFT JOIN attribute gender ON gender.attribute_type_id = 2 AND gender.person_id = person.person_id …

2
如何在不到一秒钟的时间内跟踪发生的阻塞-SQL Server
我正在尝试解决不到一秒钟的阻塞问题。OLTP应用程序非常敏感,根据约定的SLA,某些事务的响应时间必须小于200ms。我们在新代码发行版中遇到了一些锁升级问题,可以通过减少更新中的批处理大小来解决这些问题。即使批处理量很小,我们也怀疑新sp阻塞了OLTP事务更新的同一行。 我需要找到被阻塞的会话及其等待的资源。根据我的理解,“阻塞的过程阈值”可以设置为至少1秒,因此这不会捕获阻塞。 我正在试验wait_info和wait_completed x事件。 还有其他方法可以跟踪此问题。谢谢

2
扩展PostgreSQL触发器
Postgres如何触发机制扩展? 我们有大型的PostgreSQL安装,并且我们正在尝试使用日志表和TRIGGER来实现基于事件的系统。 基本上,我们想为要通知UPDATE / INSERT / DELETE操作的每个表创建一个TRIGGER。触发该触发器后,它将执行一个函数,该函数将简单地将新行(对事件进行编码)追加到日志表中,然后我们将从外部服务中进行轮询。 在开始使用Postgres TRIGGER之前,我们想知道它们如何扩展:在单个Postgres安装中可以创建多少个触发器?它们会影响查询性能吗?之前有人尝试过吗?

1
不应该避免吗?
在某些SQL Server开发人员中,普遍认为这NOT IN非常慢,应该重写查询以使它们返回相同的结果,但不要使用“ evil”关键字。(示例)。 这有什么道理吗? 例如,是否存在SQL Server(哪个版本?)中的一些已知错误,该错误导致使用的查询的NOT IN执行计划比使用 一个LEFT JOIN结合了NULL支票或 (SELECT COUNT(*) ...) = 0在WHERE条款中?

3
使用IN()提高查询性能
我有以下SQL查询: SELECT Event.ID, Event.IATA, Device.Name, EventType.Description, Event.Data1, Event.Data2 Event.PLCTimeStamp, Event.EventTypeID FROM Event INNER JOIN EventType ON EventType.ID = Event.EventTypeID INNER JOIN Device ON Device.ID = Event.DeviceID WHERE Event.EventTypeID IN (3, 30, 40, 41, 42, 46, 49, 50) AND Event.PLCTimeStamp BETWEEN '2011-01-28' AND '2011-01-29' AND Event.IATA LIKE '%0005836217%' ORDER BY Event.ID; …

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.