标签: query-performance

查询在 xml 中搜索子字符串

我使用下面的查询来搜索整个 xml 中的子字符串(包括节点名称和节点值)

SELECT * 
FROM tablename
WHERE ( Charindex('abc',CAST([xmlcolumn] AS VARCHAR(MAX)))>0 ) 
Run Code Online (Sandbox Code Playgroud)

我想要一个性能比这更好的替代查询。所以请推荐一些。详情如下: 表:

CREATE TABLE [dbo].[tablename](
    [Sl_no] [int] NOT NULL,
    [Date] [date] NULL,
    [Operation] [nvarchar](max) NULL,
    [Allot] [nvarchar](50) NULL,
    **[xmlcolumn]** [xml] NULL,
    [By] [nvarchar](255) NULL,
    [Dept] [nvarchar](255) NULL,
    [Db] [varchar](255) NULL,
    [tabl] [varchar](255) NULL,
    [Remark] [varchar](5000) NULL,
    [Work] [int] NULL,
    [F2] [nvarchar](max) NULL,
    [F6] [nvarchar](max) NULL,
    [F5] [nvarchar](max) NULL,
    [F8] [nvarchar](max) NULL,
    [ListC] [nvarchar](255) NULL,
    [pro] [nvarchar](max) NULL,
    [Completed] [varchar](50) NULL,
    [WorkTime] [xml] NULL,
    [RelatedData] [varchar](255) NULL,
    [User] …
Run Code Online (Sandbox Code Playgroud)

performance xml sql-server-2008-r2 xquery query-performance

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

MySQL连接两个大表非常慢

我有两个表,其中一个包含下载 url 的历史记录,而另一个表包含有关每个 url 的详细信息。

以下查询按过去一小时内的重复次数对 URL 进行分组。

SELECT COUNT(history.url) as total, history.url
FROM history
WHERE history.time > UNIX_TIMESTAMP()-3600
GROUP BY history.url
ORDER BY COUNT(history.url) DESC 
LIMIT 30
Run Code Online (Sandbox Code Playgroud)

上面的查询大约需要 800ms 执行,不够快,但可以接受,

但是,当与缓存表连接时,新查询大约需要25s才能执行,速度非常慢。

SELECT th.total, th.url, tc.url, tc.json 
FROM (SELECT COUNT(history.url) as total, history.url
      FROM history 
      WHERE history.time > UNIX_TIMESTAMP()-3600
      GROUP BY history.url
      ORDER BY COUNT(history.url) DESC 
      LIMIT 30
) th
INNER JOIN (SELECT cache.url, cache.json FROM cache) tc
    ON th.url = tc.url
GROUP BY th.url
ORDER BY th.total DESC
LIMIT …
Run Code Online (Sandbox Code Playgroud)

mysql performance join query-performance

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

Postgres NOT NULL 优化

我正在尝试优化这个 SQL 查询:

select topics.id from "topics"
     left join "articles_topics" on "topics"."id" = "articles_topics"."topic_id"
     left join "articles" on "articles_topics"."article_id" = "articles"."id"
where not "topics"."type" = 'sport' and "articles"."image" is not null
group by "topics"."id"
having COUNT(articles.id) > 10
Run Code Online (Sandbox Code Playgroud)

这是完整的查询成本(我使用过EXPLAIN (ANALYZE, COSTS, VERBOSE, BUFFERS)

Finalize HashAggregate  (cost=12881.12..12974.90 rows=2501 width=8) (actual time=209.037..210.463 rows=1381 loops=1)
  Output: topics.id
  Group Key: topics.id
  Filter: (count(articles.id) > 10)
  Rows Removed by Filter: 5672
  Buffers: shared hit=8624
  ->  Gather  (cost=12018.39..12843.61 rows=7502 width=16) (actual time=198.146..205.348 rows=10376 loops=1) …
Run Code Online (Sandbox Code Playgroud)

postgresql optimization query-performance

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

TSQL 慢查询,未按预期使用索引

我有一个宽表,相对较大,有 14,264,775 行,在 Azure SQL 数据库上运行。

以下查询需要一些 TLC。

IF EXISTS (
    SELECT  1/0 
    FROM dbo.table1 src
      INNER JOIN dbo.table1 tgt 
        ON tgt.Col1 = src.Col1
    WHERE tgt.ValidFrom <= src.ValidTo
    AND tgt.ValidTo >= src.ValidFrom
    AND tgt.RecordId <> src.RecordId  
)
 BEGIN
    RAISERROR('Overlap detected in dbo.table1', 11, 1); 
 END ;
Run Code Online (Sandbox Code Playgroud)

我有这个索引。

CREATE NONCLUSTERED INDEX [IX__table1] ON dbo.table1
        ( Col1 ) 
INCLUDE (ValidFrom, ValidTo, RecordId)
GO
Run Code Online (Sandbox Code Playgroud)

这是查询的 io 统计信息。逻辑阅读能力非常出色。

在此输入图像描述

这是计划 XML。我尝试了 PasteThePlan,但它无法解析计划 XML。(也许它不喜欢Axure sql数据库计划xml)。

如您所见,[src] 上有一个索引扫描;读取 14,264,775 行(与表中的所有行数相同)。并在 [tgt] 上进行索引查找;读取 194,405,307 行。

我需要改变什么来提高查询的性能? …

sql-server index-tuning azure-sql-database query-performance

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

我可以改进这个查询吗?

SELECT * 
FROM   SameLogTable
WHERE  ID_Table IN (SELECT ID_Table-1
                    FROM   SameLogTable
                    WHERE  <SameCondition>) OR
       ID_Table IN (SELECT ID_Table
                    FROM   SameLogTable
                    WHERE  <SameCondition>) OR
       ID_Table IN (SELECT ID_Table+1
                    FROM   SameLogTable
                    WHERE  <SameCondition>)
Run Code Online (Sandbox Code Playgroud)

此查询在日志记录表上运行,我想选择特定事件,以及这些事件之前和之后的事件。这个解决方案感觉丑陋且效率低下,为此编写更好的方法是什么?

示例:如果我对 LogTable 的 ID 为 4 和 23 的行感兴趣,我想得到以下结果:

ID    Column1    Column2    ...
3     ...        ...
4     ...        ...
5     ...        ...
22    ...        ...
23    ...        ...
24    ...        ...
Run Code Online (Sandbox Code Playgroud)

这些都是来自同一 LogTable 的所有行,除了我使用 WHERE 指定第 4 行和第 23 行,并且我希望 Select 自动返回第 3,5 行(第 4 行)和第 22、24 行(第 …

performance t-sql sql-server-2008-r2 query-performance

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

更新行的性能

在 SQL Sever 中更新时,我的理解是删除整行然后重新创建(这就是您获得新时间戳的原因)。那么,如果您更新 1 个字段或 500 个字段,更新的性能是否会发生变化?

我怀疑如果有索引列,因为它必须更新索引,服务器会执行更多的“工作”。回答时,假设没有触发器。

performance sql-server t-sql update query-performance

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

为什么查询优化器不使用负过滤索引

我有一张具有以下结构的表,如您所见,有一个聚集索引和两个非聚集索引,一个非聚集索引是 IX_ParentId_Include,另一个是 FLIX_ParentId_Include

除了第二个索引被过滤之外,它们是相同的。

CREATE TABLE [dbo].[PhotoRepo] (
    [PhotoRepoId]              INT            IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL,
    [TypeId]                   TINYINT        NULL,
    [ParentId]                 INT            NULL,
    [RemoteLocation]           VARCHAR (4000) NOT NULL,
    [UploadedAt]               DATETIME       NOT NULL,
    [UploadedBy]               VARCHAR (255)  NULL,
    [FileSize]                 INT            NOT NULL,
    [DefaultChild]             BIT            NOT NULL,
    [RemoteLocationUploadedAt] DATETIME       NULL,
    CONSTRAINT [PK_FileList] PRIMARY KEY NONCLUSTERED ([PhotoRepoId] ASC)
);


GO
CREATE CLUSTERED INDEX [IX_PhotoRepoId]
    ON [dbo].[PhotoRepo]([PhotoRepoId] ASC);


GO


CREATE NONCLUSTERED INDEX [IX_ParentId_Include]
    ON [dbo].[PhotoRepo]([ParentId] ASC)
    INCLUDE([RemoteLocation], [DefaultChild], [TypeId]);
GO

CREATE NONCLUSTERED INDEX [FLIX_ParentId_Include] …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server optimization query-performance

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

在 where 查询中订购条件是否有意义?

我们在表 Tbl 中有一个聚集索引,顺序为 A、B、C。编写一个查询是否有意义

WHERE A = @a, B = @b, C = @c
Run Code Online (Sandbox Code Playgroud)

或者它会和

WHERE C = @c, B = @b, A = @a
Run Code Online (Sandbox Code Playgroud)

查询顺序对聚集索引有意义吗?

performance sql-server clustered-index t-sql query-performance

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

数据库 SQL 脚本非常非常慢(超过 70 万行的字符串操作)

我有一个包含 700,000 行的表,其中包含一个字符串 id 字段,其值例如 rec-232276-dup-0 和 rec-354240-org。rec- 是常数,但 id 的其他部分可以改变。

我想拆分这个字符串,以便我只有整数部分和一个布尔值,具体取决于下一部分是否等于 dup 或 org(1 表示 dup,0 表示 org),我将其插入回表中。

我编写了以下循环来执行此操作,并且在功能上它运行良好,但是当我在完整的 700,000 行上运行它时,它需要非常长的时间(+12 小时和计数)。

我做错了什么导致它花费这么多时间?这是导致这种情况的字符串操作吗?我可以做些什么来改善这种情况?

谢谢你的帮助。

我的脚本如下:

select id
into #ControlTable 
from [dbo].[original_test_dataset]

declare @TableID varchar(20)

while exists (select * from #ControlTable)
begin

   select @TableID = (select top 1 id
                    from #ControlTable
                    order by id asc)

   declare @duplicate bit
   declare @id_only varchar(10)

   --1. Find id only
   -- Trim off rec-
   set @id_only = REPLACE(@TableID,'rec-','')
   -- Find position of first - and …
Run Code Online (Sandbox Code Playgroud)

performance sql-server query-performance

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

Tsql 查询速度因 Or 内 where 子句而变慢,导致索引扫描而不是搜索

我一直在努力使这个查询更有效地工作。

我发现 where 子句中 Or 的数量是这个查询中最大的问题。此查询位于存储过程中。

我到了我能想到的唯一选择的地步。:

  • 为所有不同的入站参数可能性创建 16 种不同的查询。
  • 创建动态 sql 查询,但我认为这不会更快
  • 恢复到字符串 sql,但我不喜欢这样做,因为它们的执行速度不如存储过程。

我相信其他人以前也遇到过这个问题。查询性能在大约一秒或更短的时间内开始并不可怕,但在某些情况下,它被多次命中,导致长达 5 或 6 秒的延迟。

查询如下。:

DECLARE @PERSON_ID AS INT
DECLARE @ITEM_ID AS INT
DECLARE @ITEM_VERSION AS INT
DECLARE @ITEM_SUB_NAME AS VARCHAR(250)
DECLARE @ITEM_SUB_SUB_NAME AS VARCHAR(250)

--DEFAULTS
SET @PERSON_ID = 0
SET @ITEM_ID = 0
SET @ITEM_VERSION = 1
SET @ITEM_SUB_NAME = NULL
SET @ITEM_SUB_SUB_NAME = NULL

    SELECT ID, PERSON_ID, 
           ISNULL(ITEM_VERSION, 1) AS ITEM_VERSION,
           ISNULL(ITEM_SUB_NAME, '') AS 'ITEM_SUB_NAME',
           ISNULL(ITEM_SUB_SUB_NAME, '') AS 'ITEM_SUB_SUB_NAME',
           ISNULL(ITEM_DATE, '1/1/1900') AS …
Run Code Online (Sandbox Code Playgroud)

performance index sql-server t-sql query-performance

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