标签: sql-execution-plan

用于可视化mysql的工具说明

我知道查询执行计划可视化器存在.

替代文字

但从来没有看到它为mysql.你知道吗?

mysql sql sql-execution-plan

5
推荐指数
1
解决办法
4455
查看次数

实体框架缓存查询计划性能随着不同参数而降低

我有以下问题.

背景

我正在尝试使用MVC3,EF4和jquery在450万条记录的表上实现自动完成选择器.

这是表:

CREATE TABLE [dbo].[CONSTA] (
  [afpCUIT] nvarchar(11) COLLATE Modern_Spanish_CI_AS NOT NULL,
  [afpNombre] nvarchar(30) COLLATE Modern_Spanish_CI_AS NULL,
  [afpGanancias] varchar(2) COLLATE Modern_Spanish_CI_AS NULL,
  [afpIVA] varchar(2) COLLATE Modern_Spanish_CI_AS NULL,
  [afpMonot] varchar(2) COLLATE Modern_Spanish_CI_AS NULL,
  [afpIntSoc] varchar(1) COLLATE Modern_Spanish_CI_AS NULL,
  [afpEmpl] varchar(1) COLLATE Modern_Spanish_CI_AS NULL,
  [afpAct] varchar(2) COLLATE Modern_Spanish_CI_AS NULL,
  CONSTRAINT [CONSTA_pk] PRIMARY KEY CLUSTERED ([afpCUIT])
)
ON [PRIMARY]
GO

CREATE NONCLUSTERED INDEX [CONSTA_Nombre_idx] ON [dbo].[CONSTA]
  ([afpNombre])
WITH (
  PAD_INDEX = OFF,
  DROP_EXISTING = OFF,
  STATISTICS_NORECOMPUTE = OFF,
  SORT_IN_TEMPDB = OFF, …
Run Code Online (Sandbox Code Playgroud)

sql-server performance entity-framework-4 sql-execution-plan sql-server-2008r2-express

5
推荐指数
1
解决办法
4339
查看次数

如何让MS-Access为我的查询选择不同/正确的执行计划

我有一个相对简单的查询问题和执行计划Access选择它.

查询是这种形式

SELECT somethings
FROM A INNER JOIN (B INNER JOIN (C INNER JOIN D ON ...) ON ...) ON ...
WHERE A.primaryKey= 1 AND D.d = 2;
Run Code Online (Sandbox Code Playgroud)

C和D的行数相对较少.A和B有几千行.

该查询返回2行(不确定这是否相关)真的很慢.它运行17秒.如果我删除AND D.d = 2where子句的一部分,查询现在返回4行并立即运行.

所以我的理解是JET引擎可以立即运行查询而不在Dd上使用过滤器,然后立即执行所述过滤器(仅过滤4行).因此,使用D.d = 2过滤器运行查询不应该太长.

我试图创建一个没有过滤器的子查询,并将其包含在另一个只过滤结果的查询中,但它仍然很慢.我的猜测是JET引擎足够聪明以"扁平化"子查询,因此结果是相同的.

因为我无法按照我的意愿运行查询,所以我使用了JETSHOWPLAN,以便Access输出它的执行计划.这是我发现的:

对于快速查询(没有D.d = 2),查询计划的第一步是A.primaryKey = 1在A表上应用过滤器.这导致超过30000的数据集为1行.然后,连接似乎是使用索引从A到D执行,数据集永远不会超过4行.

慢查询似乎以逆转顺序执行.首先连接D和C然后D.d = 2进行测试.之后,执行从C到A的连接.通过这种方式,需要从D到C,从C到B以及从B到A连接的数据要大得多.当执行所有JOIN并且执行之前A.primaryKey=1,数据集将具有120K行.

有没有办法在Access上强制执行正确的查询计划?

我希望我很清楚.如果我发布查询计划,请告诉我.我没有,因为它们很大.

提前致谢,

熔点

ms-access sql-optimization sql-execution-plan

5
推荐指数
1
解决办法
716
查看次数

如何找出数据库上的SQL查询所需的临时空间?

我们的客户遇到了一些不一致数据的问题,我们给了他们一个查询来修复它.

现在,在运行查询之前,客户要求我提供一个查询,该查询将提供运行该查询所需的临时空间.这实际上很重要,因为此查询可能会影响表中的许多条目.

以下是我发送给他们修复问题的查询:

declare
  cursor cur is select distinct SEQID from D_LEAD where SEQID IN( SELECT SEQID FROM D_LEAD WHERE CURR_FLAG = 1 GROUP BY
  SEQID HAVING COUNT(SEQID) >1);

  seq NUMBER; 

begin

  open cur;
  loop
    fetch cur into seq;
    update D_LEAD set CURR_FLAG = 0 where LEAD_ID IN (SELECT LEAD_ID FROM D_LEAD WHERE ((LEAD_ID != (SELECT MAX(LEAD_ID) FROM D_LEAD WHERE SEQID=seq)) AND SEQID=seq));
    exit when cur%NOTFOUND;
  end loop;
  close cur;
commit;
end;
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

sql database oracle sql-execution-plan

5
推荐指数
1
解决办法
1802
查看次数

Oracle解释计划:基数返回一个庞大的数字,但查询不返回任何记录

我编写了一个复杂的oracle sql查询,解释计划统计信息如下所示:成本:209,201字节:187,944,150基数:409,675

现在,DBA调整了查询​​,统计数据如下所示:成本:42,996字节:89,874,138基数:209,226

我的第一个问题是,如果数字较低,它会自动意味着更好的表现吗?哪个数字最适合?成本/基数/字节?我的第二个问题是:我理解基数是读取的行数.但是当我运行查询时,它返回'0'行!我的印象是,对于应该返回相同结果集的两个查询,基数必须相同.我觉得这是错的?

oracle11g sql-execution-plan

5
推荐指数
1
解决办法
9076
查看次数

此查询如何在执行计划中生成两个连接运算符?

在empno上具有集群唯一索引的表结构.

CREATE TABLE [dbo].[EMP](
    [EMPNO] [int] NOT NULL,
    [ENAME] [varchar](10) NULL,
    [JOB] [varchar](9) NULL,
    [MGR] [int] NULL,
    [HIREDATE] [datetime] NULL,
    [SAL] [int] NULL,
    [COMM] [int] NULL,
    [DEPTNO] [int] NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

询问

SELECT sal,sum(sal) over(PARTITION BY empno)
FROM emp
Run Code Online (Sandbox Code Playgroud)

查询计划

在此输入图像描述

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

5
推荐指数
1
解决办法
310
查看次数

PostgreSQL解释计划差异

这是我的第一篇文章....

我有一个查询所花的时间比我想要的要长(不是我们所有人!)取决于我在WHERE子句中输入的内容……它可能运行得更快。我试图理解为什么查询计划与众不同,并且我可以做些什么来加快整个查询的速度。

这是查询1:

SELECT date_observed, base_value 
FROM device_read_data 
WHERE fk_device_rw_id IN 
(SELECT fk_device_rw_id FROM equipment_set_rw 
WHERE fk_equipment_set_id = CAST('ed151028-1fc0-11e3-b79f-47c0fd87d2b4' AS uuid))
AND date_observed 
BETWEEN '2013-12-01 07:45:00+00'::timestamptz
 AND '2014-01-01 07:59:59+00'::timestamptz
AND base_value ~ '[0-9]+(\.[0-9]+)?'
;
Run Code Online (Sandbox Code Playgroud)

这是查询计划1

"Hash Semi Join  (cost=11.65..5640243.59 rows=92194 width=16) (actual time=34.947..132522.023 rows=43609 loops=1)"
"  Hash Cond: (device_read_data.fk_device_rw_id = equipment_set_rw.fk_device_rw_id)"
"  ->  Seq Scan on device_read_data  (cost=0.00..5449563.56 rows=72157042 width=32) (actual time=0.844..123760.331 rows=71764376 loops=1)"
"        Filter: ((date_observed >= '2013-12-01 07:45:00+00'::timestamp with time zone)    AND (date_observed <= '2014-01-01 07:59:59+00'::timestamp with …
Run Code Online (Sandbox Code Playgroud)

sql postgresql sql-execution-plan

5
推荐指数
1
解决办法
755
查看次数

存储过程如何具有多个执行计划?

我正在使用MS SQL Server 2008 R2.我有一个名为rpt_getWeeklyScheduleData的存储过程.这是我用于在特定数据库中查找其执行计划的查询:

select 
   *
from 
   sys.dm_exec_cached_plans cp
      CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) st
where 
   OBJECT_NAME(st.objectid, st.dbid) = 'rpt_getWeeklyScheduleData' and 
   st.dbid = DB_ID()
Run Code Online (Sandbox Code Playgroud)

上面的查询返回9行.我期待一排.

此存储过程已被多次修改,因此我相信SQL Server在修改和运行时一直在为其构建新的执行计划.这是正确的解释吗?如果没有,那你怎么解释这个?

还有可能看到每个计划何时创建?如果是,那怎么样?

更新:

这是存储过程的签名:

CREATE procedure [dbo].[rpt_getWeeklyScheduleData]
(
   @a_paaipk        int,
   @a_location_code int,
   @a_department_code   int,
   @a_week_start_date   varchar(12),
   @a_week_end_date varchar(12),
   @a_language_code int,
   @a_flag      int 
)
as
begin
   ...
end
Run Code Online (Sandbox Code Playgroud)

存储过程很长; 如果条件都为@a_flag参数,则只有2个.

if @a_flag = 0
begin
   ...
end 

if @a_flag = 1
begin
   ...
end
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-execution-plan

5
推荐指数
1
解决办法
3531
查看次数

为什么EXPLAIN结果中的实际时间与PostgreSQL中的每次执行都不同?

我试图测试PostgreSQL中不同分区模式的效率.我用一个表和不同的分区大小创建了几个数据库,然后在每个数据库中填充了数亿个记录.

现在我想测试所有这些查询并比较结果.但问题是,当我运行相同的查询时,我在一个数据库上收到了不同的实际时间.

例如,我EXPLAIN (buffers, analyze, verbose) SELECT count(*) FROM testdata WHERE dt = '2017-06-01 08:50:00'第一次执行:

                                                                         QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------
Aggregate  (cost=356199.96..356199.97 rows=1 width=8) (actual time=155757.190..155757.190 rows=1 loops=1)
  Output: count(*)
  Buffers: shared read=290555
  ->  Append  (cost=0.00..354506.51 rows=677381 width=0) (actual time=165.565..155583.815 rows=665275 loops=1)
        Buffers: shared read=290555
        ->  Seq Scan on public.testdata  (cost=0.00..0.00 rows=1 width=0) (actual time=0.002..0.002 rows=0 loops=1)
              Filter: (testdata.dt = '2017-06-01 08:50:00'::timestamp without time zone)
        ->  Bitmap Heap Scan on public.testdata_2017_06_01  (cost=12682.26..354506.51 rows=677380 width=0) (actual time=165.562..155319.677 rows=665275 loops=1)
              Recheck Cond: …
Run Code Online (Sandbox Code Playgroud)

database postgresql amazon-rds sql-execution-plan

5
推荐指数
1
解决办法
703
查看次数

循环解释分析语句是什么意思?

我正在分析我的查询。

postgres=# explain analyze select * from student;
                                              QUERY PLAN
------------------------------------------------------------------------------------------------------
 Seq Scan on student  (cost=0.00..22.00 rows=1200 width=40) (actual time=0.005..0.005 rows=7 loops=1)
 Planning time: 0.035 ms
 Execution time: 0.019 ms
(3 rows)
Run Code Online (Sandbox Code Playgroud)

我不知道loop = 1意味着什么Seq Scan on student (cost=0.00..22.00 rows=1200 width=40) (actual time=0.005..0.005 rows=7 loops=1)

我已经搜索了postgres文档,但是没有找到关于循环参数的任何很好的参考。

提前致谢。

sql postgresql select explain sql-execution-plan

5
推荐指数
1
解决办法
995
查看次数