在 SQL Server 中,如果您要比较来自两个查询的统计 IO,您如何确保缓存不会成为一个因素?
例如(我是在打字的时候编的,不是一个真实的例子):
SELECT Type,
NAME
FROM TableA a
LEFT OUTER JOIN TableB b ON a.id = b.id
WHERE b.id IS NULL ;
SELECT Type,
NAME
FROM TableA a
WHERE NOT EXISTS (
SELECT 1
FROM tableb
WHERE id = a.id
) ;
Run Code Online (Sandbox Code Playgroud)
我现在做什么:我以这种方式运行它,获取一个新连接(新 SID)并像这样运行它(以相反的顺序):
SELECT Type,
NAME
FROM TableA a
WHERE NOT EXISTS (
SELECT 1
FROM tableb
WHERE id = a.id
) ;
SELECT Type,
NAME
FROM TableA a
LEFT OUTER JOIN TableB b ON …Run Code Online (Sandbox Code Playgroud) 我有表(2139868 行):
COLUMN1 NUMBER(20,0)
COLUMN2 XMLTYPE
COLUMN3 XMLTYPE
COLUMN4 VARCHAR2(50 BYTE)
COLUMN5 VARCHAR2(50 BYTE)
COLUMN6 VARCHAR2(50 BYTE)
COLUMN7 VARCHAR2(50 BYTE)
COLUMN8 VARCHAR2(50 BYTE)
COLUMN9 VARCHAR2(500 BYTE)
COLUMN10 VARCHAR2(100 BYTE)
COLUMN11 VARCHAR2(50 BYTE)
COLUMN12 VARCHAR2(20 BYTE)
COLUMN13 VARCHAR2(20 BYTE)
COLUMN14 TIMESTAMP(6)
COLUMN15 VARCHAR2(50 BYTE)
COLUMN16 PROPERTIES_ARRAY_TYPE
COLUMN17 TIMESTAMP(6)
COLUMN18 TIMESTAMP(6)
Run Code Online (Sandbox Code Playgroud)
在数据库中
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
Run Code Online (Sandbox Code Playgroud)
我正在尝试选择 的所有不同值COLUMN4;不幸的COLUMN4是,尽管被索引,这大约需要 18 秒。只有5个独特的项目。
如何加快查询速度?
(工作不让我上传图片,所以我会打出执行计划,发挥你的想象力)
Operation OBJECT_NAME CARDINALITY COST
---------------------- ----------- ----------- ------
SELECT STATEMENT …Run Code Online (Sandbox Code Playgroud) 我在 SQL Server 2012 中有一个简单的表,它实现了一个处理队列。随着数据的插入,检索下一个项目的查询从 <100 毫秒变为恒定的 5-6 秒。如果有人能指出性能突然下降的原因,我将不胜感激。(这似乎几乎是一夜之间的下跌)。
这是表定义:
CREATE TABLE [dbo].[messagequeue] (
[id] INT IDENTITY (1, 1) NOT NULL,
[testrunident] VARCHAR (255) NOT NULL,
[filesequence] INT NOT NULL,
[processed] BIT NOT NULL,
[dateentered] DATETIME NULL,
[filedata] VARBINARY (MAX) NULL,
[retries] INT NOT NULL,
[failed] BIT NOT NULL,
[msgobject] VARBINARY (MAX) NULL,
[errortext] VARCHAR (MAX) NULL,
[sourcefilename] VARCHAR (MAX) NULL,
[xmlsource] VARCHAR (MAX) NULL,
[messagetype] VARCHAR (255) NULL
);
CREATE NONCLUSTERED INDEX [messagequeue_sequenc_failed_idx]
ON [dbo].[messagequeue]([processed] ASC, [failed] ASC)
INCLUDE([id], …Run Code Online (Sandbox Code Playgroud) performance sql-server sql-server-2012 queue query-performance
我有一些运行缓慢的查询(按月分组的 100 万条记录中的 8 秒),并且一直试图理解执行计划。我们使用大约 10 个 TVP 来发送一组用户选择的过滤器,我有一个索引视图,占查询成本的 84%。
执行计划比较大,不能上传到这里,所以上传到这里了
我花了很多时间来尝试优化这些查询(其中有 14 个,但每个查询的核心都大同小异)并且希望任何人在阅读它们时提出建议或提示。我还实现了实际执行计划建议的查询,但查询速度慢了 5 倍?
performance sql-server execution-plan sql-server-2012 table-valued-parameters query-performance
我们有一个查询会在运行时破坏我们的生产服务器。
它是报告功能的一部分,不好的部分如下所示:
SELECT DISTINCT
mt.ID AS ID
FROM
[dbo].[MyTable] mt
WITH (NOLOCK)
WHERE
(@aVariable IS NULL
OR (CONVERT(VARCHAR(22), mt.Date1, 112) >= CONVERT(VARCHAR(22), @date1, 112))
AND (@status IS NULL
OR @status <> 2
OR ( @status = 2
AND ( SELECT COUNT(*)
FROM
MyTable mt2
WITH (NOLOCK)
WHERE
mt2.CaseID = mt.CaseID
AND mt2.Date1 > mt.Date1
) = 0
)
)
AND (@aSecondVariable IS NULL
OR (CONVERT(VARCHAR(22), mt.Date1, 112) <= CONVERT(VARCHAR(22), @date1, 112)))
AND (@aThirdVariable IS NULL
OR (CONVERT(VARCHAR(22), mt.Date2, 112) >= …Run Code Online (Sandbox Code Playgroud) 我有两个数据库,并且都对具有相同索引的同一个表有相同的视图。
该视图从位置表中选择给定 IMEI 的顶部位置。
CREATE VIEW [dbo].[LatestDeviceLocation]
AS
SELECT DISTINCT t.Imei, t.Accuracy, t.UserId, t.Lat, t.Lng, t.Timestamp
FROM (SELECT Imei, MAX(Timestamp) AS latest
FROM dbo.DeviceLocation
GROUP BY Imei) AS m INNER JOIN
dbo.DeviceLocation AS t ON t.Imei = m.Imei AND t.Timestamp = m.latest
GO
Run Code Online (Sandbox Code Playgroud)
我正在使用一个非常简单的 select 查询视图,其中包含一个非常简单的 where 子句。
SELECT TOP 1000 [Imei]
,[Accuracy]
,[UserId]
,[Lat]
,[Lng]
,[Timestamp]
FROM [dbo].[LatestDeviceLocation]
Where [Timestamp] > '2015-02-19T00:00:00.000Z' AND [Timestamp] < '2015-02-26T23:59:59.999Z'
Run Code Online (Sandbox Code Playgroud)
在我的实时服务器上,当我查询我的视图时,我会在 < 1 秒内取回数据。当我添加一个Where [Timestamp] > '2015-02-19T00:00:00.000Z' AND [Timestamp] < '2015-02-26T23:59:59.999Z'跳转到大约 …
如何获取列中具有最新值的TIMESTAMPZ行?是否需要索引?指数会改变策略吗?行为会因数据库而异吗(我使用的是 Postgres 9.4)?
我的应用程序记录来自数据馈送的数据。另一个过程无休止地查询以获取最新的最新条目。较旧的数据有时可能来自二手资料。所以最近插入的行通常但不一定是最新的数据。
我正在使用这种 SQL where when_is a TIMESTAMP WITH TIME ZONEcolumn:
SELECT *
FROM my_table_
ORDER BY when_ DESC
LIMIT 1
;
Run Code Online (Sandbox Code Playgroud)
此代码有效(如果数据中没有 NULL 值!)。但是可能有几百万行,并且每 10 秒查询一次,我很担心性能。
when_列上没有任何索引,此语句是否需要对所有行进行全面扫描?
添加索引会改变性能吗?Postgres 会自动扫描索引以定位最近的行,还是我必须做些什么才能进行索引扫描?
使用when_列上的索引,我是否应该更改此 SQL 以使用其他一些查询方法/策略?
有没有其他方法来收集新插入的行?我的主键使用UUID而不是SERIAL 类型,并且可能会在多个数据库实例之间联合数据,因此排除了检查不断增加的整数的可能性。
我正在使用 Postgres 9.1 我要加入两个表:
wikidb=> \d page
Table "public.page"
Column | Type | Modifiers
-----------------------+---------------+------------------------------
page_id | bigint | not null
page_namespace | integer | not null default 0
page_title | text | not null default ''::text
[...]
Indexes:
[...]
"page_page_namespace_page_title_idx" UNIQUE, btree (page_namespace, page_title)
wikidb=> \d pagelinks
Table "public.pagelinks"
Column | Type | Modifiers
-------------------+---------+----------------------------
pl_from | bigint | not null default 0::bigint
pl_namespace | integer | not null default 0
pl_title | text | not null default ''::text …Run Code Online (Sandbox Code Playgroud) postgresql performance optimization execution-plan postgresql-9.1 query-performance
我正在使用事实表源查询,我观察到查询的性能很糟糕。只需在 select 子句中使用一个转换日期格式的函数,它就从 1:00 分钟增加到 6:30 分钟。它只有 7 个表在简单的条件下连接(没有疯狂的东西)。
展望未来,我需要向连接列表添加更多的表。这只会使性能变得更糟。在开始添加之前,我需要对当前查询进行微调。
这是查询:
SELECT [dbo].[dFK](oew.StartDate) AS StartDate, -- INTEGER DATE!
[dbo].[dFK](oew.EndDate) AS EndDate,
[dbo].[dFK](oew.EffectiveDate) AS EffectiveDate
FROM OpenEnrollmentWindow oew
INNER JOIN ProductYear py ON oew.OrganizationProductYearID = py.ID
INNER JOIN Marketplace m ON py.MarketplaceID = m.ID
INNER JOIN Organization o ON m.OrganizationID = o.ID
INNER JOIN Consumer c ON c.OrganizationID = o.ID
LEFT JOIN OpenEnrollmentWindowProduct oewp ON oew.ID = oewp.OrganizationOpenEnrollmentWindowID
LEFT JOIN OpenEnrollmentWindowProductType oewpt ON oew.ID = oewpt.OrganizationOpenEnrollmentWindowID
Run Code Online (Sandbox Code Playgroud)
下面是函数的定义:
CREATE FUNCTION [dbo].[dFK]
(@dt …Run Code Online (Sandbox Code Playgroud) performance ×10
sql-server ×5
index ×3
optimization ×2
oracle ×2
postgresql ×2
index-tuning ×1
queue ×1