标签: sql-execution-plan

SQL查询,执行顺序

如果查询同时包含group by和order by子句,那么SQL后面的执行顺序是什么.它取决于它们在查询中的位置???

sql sql-execution-plan

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

Oracle:数据库之间执行计划的差异

我正在比较查询我的开发和生产数据库.

它们都是Oracle 9i,但几乎每个查询都有完全不同的执行计划,具体取决于数据库.

所有表/索引都相同,但dev数据库大约是每个表的1/10行.

在生产中,它为大多数查询选择的查询执行计划与开发不同,并且成本高出1000倍.在某些情况下(生成表访问),生产查询似乎也没有使用正确的查询索引.

我最近也在两个数据库上运行了dbms_utility.analyze模式,希望CBO可以解决问题.

是否有其他潜在的oracle配置可能导致此问题?

我主要是开发人员,所以这种DBA分析起初相当混乱.

oracle performance oracle9i sql-execution-plan

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

DateTime.Now如何影响SQL Server中的查询计划缓存?

题:

DateTime.Now参数作为参数传递给proc会阻止SQL Server缓存查询计划吗?如果是这样,那么网络应用程序是否错过了巨大的性能提升?

可能解决方案

我认为DateTime.Today.AddDays(1)这是一个可能的解决方案.它会将相同的结束日期传递给sql proc(每天).用户仍然可以获得最新数据.请同意这一点.

举例:

假设我们有一个存储过程.它将数据报告给网页上的用户.用户可以设置日期范围.如果用户将今天的日期设置为"结束日期",其中包括今天的数据,则Web应用程序将传递DateTime.Now给sql proc.

假设一个用户运行一个报告5/1/2010- now经过多次转发.在网页上,用户看到5/1/20105/4/2010.但是web应用程序DateTime.Now作为结束日期传递给sql proc.因此,尽管用户正在查询类似的日期范围,但proc中的结束日期将始终不同.

假设表中的记录数和用户数都很大.所以任何性能提升都很重要 因此问题的重要性.

示例proc和execution(如果这有助于理解):

CREATE PROCEDURE GetFooData
    @StartDate datetime
    @EndDate datetime
AS

    SELECT *
    FROM Foo
    WHERE LogDate >= @StartDate
    AND LogDate < @EndDate
Run Code Online (Sandbox Code Playgroud)

这是使用DateTime.Now的示例执行:

EXEC GetFooData '2010-05-01', '2010-05-04 15:41:27' -- passed in DateTime.Now
Run Code Online (Sandbox Code Playgroud)

这是使用DateTime.Today.AddDays(1)的示例执行

EXEC GetFooData '2010-05-01', '2010-05-05' -- passed in DateTime.Today.AddDays(1)
Run Code Online (Sandbox Code Playgroud)

两个过程都返回相同的数据,因为当前时间是:2010-05-04 15:41:27.

sql-server caching sql-server-2005 sql-execution-plan

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

添加内部查询不会更改执行计划

请考虑以下查询.

select * from contact where firstname like '%some%'

select * from 
    (select * from contact) as t1 
where firstname like '%some%'
Run Code Online (Sandbox Code Playgroud)

两个查询的执行计划相同并且同时执行.但是,我期望第二个查询将有一个不同的计划并执行得更慢,因为它必须从联系人中选择所有数据并应用过滤器.看起来我错了.

我想知道这是怎么回事?

数据库服务器:SQL Server 2005

sql performance sql-server-2005 sql-execution-plan

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

SQL:实际行数差异

可能重复:
SQL Server如何计算出估计的行数?

我只是在查看SQL Server图形执行计划,我遇到了以下两个信息:

  1. 实际行数-2385
  2. 估计行数为180

我想知道为什么会出现这种差异.你能解释一下他们之间的区别吗?如果你能用一些例子来解释它会很有帮助.

谢谢.

sql sql-server sql-server-2008 sql-execution-plan

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

试图了解sql执行计划

我在SQL Server中创建了一个简单的表:

MemberId INT PRIMARY KEY Identity
Name NVARCHAR(100) NULL
Description NVARCHAR(250) NULL
Run Code Online (Sandbox Code Playgroud)

当我将MemberId创建为主键时,添加的唯一索引是聚簇索引.我没有为Name或Description添加索引.

我向表中添加了大约30,000行测试数据并执行以下查询:

SELECT * FROM Members WHERE Name = 'Foo'
Run Code Online (Sandbox Code Playgroud)

执行计划说如下:

Clustered Index Scan - cost 100%
Run Code Online (Sandbox Code Playgroud)

这是一个聚簇索引如何扫描?我不是在预测聚簇索引.我认为这更像是一次桌面扫描.谁可以给我解释一下这个?如果没有,究竟会导致表扫描的原因是什么?

sql-server sql-execution-plan

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

简单的更改会导致SQL查询执行时间大幅增加

我在我的Microsoft SQL Server(2012 Express)数据库上运行以下SQL查询,它工作正常,在不到一秒的时间内执行:

SELECT
  StringValue, COUNT(StringValue)
FROM Attributes
WHERE
  Name = 'Windows OS Version'
  AND StringValue IS NOT NULL
  AND ProductAssociation IN (
    SELECT ID
    FROM ProductAssociations
    WHERE ProductCode = 'MyProductCode'
  )
GROUP BY StringValue
Run Code Online (Sandbox Code Playgroud)

我在内部查询中添加了一个过滤器,它继续正常工作,返回的结果略少(如预期的那样),并且在不到一秒的时间内执行.

SELECT
  StringValue, COUNT(StringValue)
FROM Attributes
WHERE
  Name = 'Windows OS Version'
  AND StringValue IS NOT NULL
  AND ProductAssociation IN (
    SELECT ID
    FROM ProductAssociations
    WHERE ProductCode = 'MyProductCode'
    AND ID IN (
      SELECT A2.ProductAssociation
      FROM Attributes A2
      WHERE A2.Name = 'Is test' AND …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server execution-time sql-execution-plan

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

MS SQL执行计划中未使用的列

我有一个查询并检查SQL Management Studio中的执行计划.某些非聚集索引扫描步骤将返回表的PK列,而不是索引和连接列.例:

select a.c10, b.c20
from a inner join b on a.c11 = b.c21
where a.c12 = 23
Run Code Online (Sandbox Code Playgroud)

表a上的索引:

create unique nonclustered index ix_a_1 on a (a.c12 asc) include ( a.c13, a.c14)
Run Code Online (Sandbox Code Playgroud)

查询计划显示:

index seek, nonclustered, ix_a_1 , output list: a.primary_key_col
Run Code Online (Sandbox Code Playgroud)

查询中未使用a.primary_key_col列.为什么这是输出列表中包含的唯一列?

sql-server select sql-execution-plan

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

可以在Oracle中禁用SQL执行计划吗?

我遇到一种情况,即Oracle为给定查询创建多个执行计划。大多数情况下,它会选择性能良好的特定产品。但是,有时它选择一个包含笛卡尔连接的连接,这是非常错误的。如果我们删除笛卡尔联接计划并使用其他计划之一运行查询,则该查询执行良好,这向我暗示了基础数据确实不需要笛卡尔。

我们曾尝试收集统计数据并摆正直方图,但最终,笛卡尔联接执行计划似乎又回来了,并被间歇性地使用(有时需要数周或数月)。

在Oracle中是否可以禁用特定的执行计划?我们不能只是删除它,因为它似乎又回来了,但是将其保留并禁用它应该可以解决,但是我真的不知道该怎么做或是否有可能。

sql database oracle database-performance sql-execution-plan

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

解释计划和gather_plan_statistics的区别

任何人都可以告诉我什么时候应该使用gather_plan_statistics提示或何时应该使用解释计划.gather_plan_statistics提示的实际目的是什么.

sql oracle sql-execution-plan

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