标签: query-performance

查询期间从磁盘检索什么?

相当简单的问题,可能在某处得到了回答,但我似乎无法为 Google 形成正确的搜索问题......

在查询该表的子集时,特定表中的列数是否会影响查询的性能?

例如,如果表 Foo 有 20 列,但我的查询只选择了其中的 5 列,那么有 20(而不是 10)列会影响查询性能吗?为简单起见,假设 WHERE 子句中的任何内容都包含在这 5 列中。

除了操作系统的磁盘缓存之外,我还担心 Postgres 的缓冲区缓存的使用。我对 Postgres 的物理存储设计一无所知。表存储在多个页面上(默认为每页 8k 大小),但我不太明白元组是如何从那里排列的。PG 是否足够聪明,只能从磁盘中获取包含这 5 列的数据?

postgresql performance query-performance

15
推荐指数
2
解决办法
2169
查看次数

SQL Server 如何知道谓词是相关的?

在诊断基数估计不佳的 SQL Server 2008 R2 查询(尽管有简单的索引、最新的统计数据等)和查询计划不佳时,我发现了一篇可能相关的知识库文章: FIX:运行查询时性能不佳包含 SQL Server 2008 或 SQL Server 2008 R2 或 SQL Server 2012 中的关联 AND 谓词

我可以猜测知识库文章中“相关”的含义,例如谓词#2 和谓词#1 主要针对相同的行。

但我不知道 SQL Server 是如何知道这些相关性的。表是否需要包含来自两个谓词的列的多列索引?SQL 是否使用统计信息来检查一列中的值是否与另一列相关?还是使用了其他方法?

我问这个有两个原因:

  1. 确定使用此修补程序可以改进我的哪些表和查询
  2. 知道我应该在索引、统计等方面做些什么来影响 #1

performance sql-server statistics sql-server-2008-r2 query-performance

15
推荐指数
1
解决办法
1611
查看次数

SentryOne 计划浏览器是否有效?

SentryOne Plan Explorer是否像宣传的那样工作,是否合法?有什么问题或需要担心的事情吗?

与 SSMS 对估计执行计划视图的噩梦相比,它似乎以颜色显示了热路径。

我担心的是 - 它是否恶意或以其他方式修改任何数据?

编辑:我刚刚听说过它,以前从未听说过这家公司。

performance sql-server optimization execution-plan query-performance

14
推荐指数
4
解决办法
2493
查看次数

为什么查询在存储过程中比在查询窗口中运行得慢?

我有一个复杂的查询,它在查询窗口中运行 2 秒,但作为存储过程运行大约 5 分钟。为什么作为存储过程运行需要这么长时间?

这是我的查询的样子。

它需要一组特定的记录(由@id和标识@createdDate)和特定的时间范围(从 开始的 1 年@startDate),并返回发送的信件的汇总列表以及由于这些信件而收到的估计付款。

CREATE PROCEDURE MyStoredProcedure
    @id int,
    @createdDate varchar(20),
    @startDate varchar(20)

 AS
SET NOCOUNT ON

    -- Get the number of records * .7
    -- Only want to return records containing letters that were sent on 70% or more of the records
    DECLARE @limit int
    SET @limit = IsNull((SELECT Count(*) FROM RecordsTable WITH (NOLOCK) WHERE ForeignKeyId = @id AND Created = @createdDate), 0) * .07

    SELECT DateSent …
Run Code Online (Sandbox Code Playgroud)

performance sql-server-2005 stored-procedures query-performance

14
推荐指数
1
解决办法
4万
查看次数

提高 sys.dm_db_index_physical_stats 的性能

在维护工作期间,我试图获取碎片索引的列表。但查询速度极慢,执行时间超过 30 分钟。我认为这是由于对 sys.dm_db_index_physical_stats 的远程扫描。

有什么办法可以加快以下查询的速度:

SELECT
    OBJECT_NAME(i.OBJECT_ID) AS TableName,
    i.name AS TableIndexName
FROM
    sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') phystat 
    INNER JOIN sys.indexes i 
        ON i.OBJECT_ID = phystat.OBJECT_ID AND i.index_id = phystat.index_id 
WHERE 
    phystat.avg_fragmentation_in_percent > 20 
    AND OBJECT_NAME(i.OBJECT_ID) IS NOT NULL
ORDER BY phystat.avg_fragmentation_in_percent DESC
Run Code Online (Sandbox Code Playgroud)

我不是 DBA,可能在上面的查询中犯了一个明显的错误,或者可能有一些索引或统计信息会有所帮助?也许这只是数据库的大小(大约 20Gb,大约有 140 个表)。

我问的原因是我们只有一个非常小的夜间维护窗口,而这占用了大部分时间。

performance index sql-server maintenance dmv query-performance

14
推荐指数
3
解决办法
2万
查看次数

如何在一个查询中进行多个计数?

我用查询来计算记录

SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%something%'
SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%another%'
SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%word%'
Run Code Online (Sandbox Code Playgroud)

对于每一个计数,mysql都需要遍历整个表,如果表很长,查询很多,这是一个大问题。

我想知道是否有一种方法可以在一个查询中进行所有计数。在这种情况下,当mysql遍历每一行时,它会处理所有计数,而无需一遍又一遍地扫描整个表。

mysql performance query count query-performance

14
推荐指数
2
解决办法
9万
查看次数

使用 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;
Run Code Online (Sandbox Code Playgroud)

我在Event表上也有一个列的索引TimeStamp。我的理解是这个索引没有使用,因为IN()声明。所以我的问题是有没有办法为这个特定的IN()语句建立索引来加速这个查询?

我还尝试将 上Event.EventTypeID IN (2, 5, 7, 8, 9, 14)的索引添加为过滤器TimeStamp,但是在查看执行计划时,它似乎没有使用此索引。对此的任何建议或见解将不胜感激。

下面是图形化计划:

执行计划

这是.sqlplan 文件的链接

performance sql-server-2008-r2 filtered-index query-performance

14
推荐指数
2
解决办法
2973
查看次数

不应该避免吗?

在一些 SQL Server 开发人员中,普遍认为NOT IN速度非常慢,应该重写查询,以便它们返回相同的结果,但不要使用“evil”关键字。(示例)。

这有什么道理吗?

例如,SQL Server 中是否存在一些已知错误(哪个版本?)导致使用NOT IN的查询比使用的等效查询具有更差的执行计划

  • 一个LEFT JOIN结合了NULL支票或
  • (SELECT COUNT(*) ...) = 0WHERE条款中?

performance sql-server except query-performance

14
推荐指数
1
解决办法
390
查看次数

比较 SQL Server 2012 中的两个查询

我正在比较 SQL Server 2012 中的两个查询。目标是在选择最佳查询时使用查询优化器提供的所有相关信息。两个查询产生相同的结果;所有客户的最大 orderid。

在使用 FREEPROCCACHE 和 DROPCLEANBUFFERS 执行每个查询之前清除缓冲池

使用下面提供的信息,哪个查询是更好的选择?

-- Query 1 - return the maximum order id for a customer
SELECT orderid, custid
FROM Sales.Orders AS O1
WHERE orderid = (SELECT MAX(O2.orderid)
                 FROM Sales.Orders AS O2
                 WHERE O2.custid = O1.custid);


-- Query 2 - return the maximum order id for a customer
SELECT MAX(orderid), custid
FROM Sales.Orders AS O1
group by custid
order by custid
Run Code Online (Sandbox Code Playgroud)

统计时间

查询 1 STATISTICS TIME:CPU 时间 = 0 毫秒,经过时间 …

performance sql-server-2012 query-performance

14
推荐指数
1
解决办法
2万
查看次数

高 CXPACKET 和 LATCH_EX 等待

我正在处理的数据处理系统存在一些性能问题。我从一小时的 peroid 中收集了等待统计数据,其中显示了大量的 CXPACKET 和 LATCH_EX 等待事件。

该系统由 3 个处理 SQL Server 组成,它们进行大量的数字运算和计算,然后将数据馈送到中央集群服务器。处理服务器最多可以同时运行 6 个作业。这些等待统计数据适用于我认为导致瓶颈的中央集群。中央集群服务器有 16 个内核和 64GB RAM。MAXDOP 设置为 0。

我猜 CXPACKET 来自正在运行的多个并行查询,但是我不确定 LATCH_EX 等待事件表示什么。从我读到的这可能是一个非缓冲等待?

任何人都可以建议这种等待统计的原因是什么,以及我应该采取什么行动来调查这个性能问题的根本原因?

顶部查询结果是总等待统计数据,底部查询结果是 1 小时内的统计数据 SQL 等待示例

performance sql-server parallelism wait-types query-performance

14
推荐指数
2
解决办法
4万
查看次数