标签: query-performance

Mysql 上 GROUP_CONCAT 的使用

据我了解,or应尽可能避免使用查询中的经验法则。

我有两个具有一对多关系的表。

我已经加入了两个如下表。

SELECT A.*, group_concat(B.info separator ','), group_concat(B.info2 separator ',')
FROM A
JOIN B
ON A.id = B.a_id
GROUP BY A.id;
Run Code Online (Sandbox Code Playgroud)

使用是否GROUP_CONCAT会像or在 MySQL 中一样影响性能?如果是这样,连接这些表的有效方法是什么?

任何建议或建议将不胜感激。谢谢你。

mysql performance query-performance

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

如何通过查询在sql中的日期列中添加循环?

如果ID = 01234并且此 ID 在一个月内进行了 3 次交易,如下所示:

***DAY_no              Balance*** 
   1/1/2018              5000
   10/1/2018             10000
   15/1/2018             12000
Run Code Online (Sandbox Code Playgroud)

我想要这样的数据:

***DAY_no              Balance*** 
   1/1/2018              5000
   2/1/2018              5000
   3/1/2018              5000
   4/1/2018              5000
   5/1/2018              5000
   6/1/2018              5000
   7/1/2018              5000
   8/1/2018              5000
   9/1/2018              5000
   10/1/2018             10000
   11/1/2018             10000
   12/1/2018             10000
   13/1/2018             10000
   14/1/2018             10000
   15/1/2018             12000
   16/1/2018             12000
   17/1/2018             12000
   18/1/2018             12000
   19/1/2018             12000
   20/1/2018             12000
   21/1/2018             12000
   22/1/2018             12000
   23/1/2018             12000
   24/1/2018             12000
   25/1/2018             12000
   26/1/2018             12000
   27/1/2018             12000
   28/1/2018             12000
   29/1/2018             12000
   30/1/2018             12000 …
Run Code Online (Sandbox Code Playgroud)

performance sql-server subquery sql-server-2012 query-performance

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

查询中的 for 循环 - 如何使用 Union?

你好朋友我正在研究一个从数据库中绘制数据的模块,问题是我必须首先绘制一系列通过数学公式的数据。到目前为止没问题,但我必须从一年中的几个月中获取数据,因此我必须重复这个过程十二次。我的真实问题是这样的:

我怎样才能让每个响应只有一行一行?

如果我尝试这样的事情......

DECLARE @cnt INT = 0;
WHILE @cnt < 12 
BEGIN
select idestatus from order 
SET @cnt = @cnt + 1;
END;
Run Code Online (Sandbox Code Playgroud)

我将执行 12 个查询和 12 个表而我只需要一个。我最终会将其转换为json,因此我希望将所有内容都放在一个响应表中。这是我的查询:

declare
@a decimal(5,2) = 0,
@d decimal(5,2) = 0,
@f1 decimal(5,2) = 0,
@f2 decimal(5,2) = 0

set
@a = (
select 
COUNT(idEstatus) A_D
from t1
where (year(dat)) = 2017 and (month(dat)) = 1
and idEstatus = 2
)
set
@d = (
COUNT(idEstatus) A_D 
from t1
where (year(dat)) …
Run Code Online (Sandbox Code Playgroud)

performance sql-server query-performance

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

使用日期列加速请求的最佳方法

我们的数据库正在接收以下请求:

select * from [schema].[table] (nolock) where (Date_A > Date_B and Archive = 0)
Run Code Online (Sandbox Code Playgroud)

这是我们的应用程序发出的正常请求。平均而言,完成请求需要 200 毫秒 - 400 毫秒,CPU 大约需要 100 毫秒 - 150 毫秒。读取通常在 48k 左右。这至少是该脚本如何执行的一个示例。

加速此类请求的最佳方法是什么(如果有办法)?

该表有 240,932 行,查询返回 0 条记录。

performance sql-server query-performance

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

SQL Server 语句在 Oracle 中即时运行时需要永远

请帮我解释这个声明和计划:

https://www.brentozar.com/pastetheplan/?id=Bysy6YtEV

我们从 Oracle 迁移到 SQL Server,我们有一些非常奇怪的行为。它可能与迁移过程中的问题有关。

我发现很难解释执行计划。两种环境都应该具有相同的结构和索引。统计数据应该是最新的。SQL Server 中的设置:

  • 启用创建自动统计
  • 针对 Ad Hoc 查询进行优化 = true
  • 启用快照隔离
  • 最大平行 = 4
  • 阈值 50

DB 大小为 600 Gb,16 核,160 Gb 内存。

在此处输入图片说明

查询:

SELECT
    COUNT ( t_01.rsecondary_objectu ) AS selectExpr
FROM
    PIMANRELATION t_01 ,
    PITEM t_02 ,
    PITEMREVISION t_03
WHERE
    (   (   (   ( t_01.rprimary_objectu = t_02.puid )
            OR  ( t_01.rprimary_objectu = t_03.puid )
            )
       AND
            ( t_01.rrelation_typeu = 'w8INy241VJFL2B' )
        )
   AND  t_01.rsecondary_objectu = '2yLJkWqiVJFL2B'
    )
Run Code Online (Sandbox Code Playgroud)

甲骨文

在此处输入图片说明

我们发现问题是相关的,并且取决于数据。如果我选择一个不同的项目在 GUI 中复制(它实际上是一个复制的东西以及应用程序如何执行这些语句),它会立即工作。查询然后一旦工作正常看起来有点不同:https …

performance sql-server execution-plan sql-server-2014 query-performance

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

将引号放在整数列的 WHERE 子句中有什么后果?

我有一个包含some_column数据类型列的表integer
我注意到我的 PostgreSQL 10.6 实例足够智能,可以将以下两个查询解释为相同:

select * from my_table where some_column = 5; -- no quotes

select * from my_table where some_column = '5'; -- quotes added
Run Code Online (Sandbox Code Playgroud)

在列的where子句中添加引号有什么影响integer
它会对一个包含 2000 万行的大表产生性能影响吗?
(有一个索引some_column。)

postgresql performance syntax postgresql-10 query-performance

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

Sargability 问题 - 变量的顺序

我有一个有几行的存储过程:

AND ( @StartDate IS NULL OR @StartDate <= r.ReferralDate )
AND ( @EndDate IS NULL OR @EndDate >= r.ReferralDate )
Run Code Online (Sandbox Code Playgroud)

是否应该改写为:

AND ( r.ReferralDate >= @StartDate or @Startdate IS NULL  )
AND ( r.ReferralDate <= @EndDate or @EndDate IS NULL )
Run Code Online (Sandbox Code Playgroud)

我尝试了两种方法并查看执行计划。估计的行数略有不同,但除此之外我没有看到任何变化,所以我认为语句中的顺序无关紧要,但希望有人可以验证。

performance sql-server t-sql query-performance

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

优化查询以减少逻辑读取

我有一个返回 127K 行的 SQL Server 2016 查询。您可以在此处找到查询和查询计划。如果您还需要表结构,请告诉我。

我需要加入一个只有 20 行的表,作为其中一个产品的替代品。换句话说,我从主表中查询产品,但在某些条件下,其中一些可以被其他产品替换。

问题是,对于那个简单的表,我有 254K 的逻辑读取。我试过LEFT JOINOUTER APPLY

关于如何替换它以避免大量逻辑读取的任何建议?只是提一下,只有 1 个产品有替代品。

performance sql-server sql-server-2016 query-performance

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

避免错误基数估计统计的预防措施

这是Queries 随机变慢的后续行动,良好的预防措施?,试图就那里陈述的一个想法提出更具体的问题。

查询在长时间的快速历史之后突然变慢的一个常见原因是基数估计过时。SQL Server 利用基数估计来找出最快回答给定查询的查询计划。如果由于基数估计过时,通常需要几分钟的查询突然激增至数十小时,则可能会在支持人员做出响应之前对业务使用产生负面影响。

是否有任何措施可以在执行查询之前先发制人地应用以查找和修复过时的基数估计?是否有任何特定的工具可以定期执行以检查并修复它们,或者可能需要观察一些指标来表明数据库中的估计值有多好?

sql-server cardinality-estimates query-performance

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

SQL Server 不使用 OPTION(MAXDOP 20)创建并行计划

我们在具有 8 个套接字和 20 个处理器的 VM 上托管了一个 UAT3 服务器,我们在具有相同配置的同一 VM 上托管了类似的 UAT2 服务器。

我们在两个服务器上运行以下查询

select recid from Table1 where nation='AE'
Run Code Online (Sandbox Code Playgroud)

两个服务器具有相同的数据和相同的结构。

UAT2 和 UAT3 具有默认设置并行5 和最大并行度的成本阈值0。

IN UAT2 服务器并行处理正在发生。它需要 10 秒才能完成,但 UAT3 串行处理正在发生,因为它需要 3 分 30 秒。

我们比较 UAT2 和 UAT3 服务器配置都相同。不知道为什么 SQL Server 在 UAT2 中选择并行执行而不是在 UAT3 中。

下面是表定义

select recid from Table1 where nation='AE'
Run Code Online (Sandbox Code Playgroud)

下面是视图

CREATE TABLE [dbo].[FKMB_CUSTOMER]( 
    [RECID] [nvarchar](64) NOT NULL, 
    [XMLRECORD] [xml] NULL, 
    [ALT_CUSTOMER] AS 
        ([dbo].[IX_CUSTOMER_ALT_CUSTOMER]([XMLRECORD])) 
        PERSISTED, 
    [SMS] AS 
        ([dbo].[IX_CUSTOMER_SMS_1]([XMLRECORD])) …
Run Code Online (Sandbox Code Playgroud)

sql-server parallelism execution-plan query-performance

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