小编ade*_*dek的帖子

在SQL Server 2012中使用带有Fulltext的OFFSET/FETCH时性能下降

我正在尝试编写一个数据库大小的查询结果分页.正如SQL Server 2012所提供的OFFSET/FETCH,我正在使用它.但是在我将语句添加到查询后,需要花费10倍的时间.

查询:

SELECT 
    p.ShopId, 
    count(1) as ProductsQuantity, 
    MIN(LastPrice) as MinPrice, 
    MAX(LastPrice) as MaxPrice
FROM Product2 p WITH (NOLOCK)
INNER JOIN
   CONTAINSTABLE(Product2, ProductName, 'czarny') AS KEY_TBL
ON KEY_TBL.[key]=p.Id
WHERE 
    (p.LastStatus > 0 OR p.LastStatus = -1) 
GROUP BY p.ShopId
ORDER BY p.ShopId asc



SELECT 
    p.ShopId, 
    count(1) as ProductsQuantity, 
    MIN(LastPrice) as MinPrice, 
    MAX(LastPrice) as MaxPrice
FROM Product2 p WITH (NOLOCK)
INNER JOIN
   CONTAINSTABLE(Product2, ProductName, 'czarny') AS KEY_TBL
ON KEY_TBL.[key]=p.Id
WHERE 
    (p.LastStatus > 0 OR p.LastStatus = -1)   
GROUP …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server full-text-search sql-server-2012

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

Sql Server删除和合并性能

我的表中包含一些买入/卖出数据,其中包含大约8M的记录:

CREATE TABLE [dbo].[Transactions](
[id] [int] IDENTITY(1,1) NOT NULL,
[itemId] [bigint] NOT NULL,
[dt] [datetime] NOT NULL,
[count] [int] NOT NULL,
[price] [float] NOT NULL,
[platform] [char](1) NOT NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

每个X分钟我的程序为每个itemId获取新的事务,我需要更新它.我的第一个解决方案是两步DELETE + INSERT:

delete from Transactions where platform=@platform and itemid=@itemid
insert into Transactions (platform,itemid,dt,count,price) values (@platform,@itemid,@dt,@count,@price)
[...]
insert into Transactions (platform,itemid,dt,count,price) values (@platform,@itemid,@dt,@count,@price)
Run Code Online (Sandbox Code Playgroud)

问题是,这个DELETE语句平均需要5秒.这太长了.

我找到的第二个解决方案是使用MERGE.我创建了这样的存储过程,wchich采用表值参数:

CREATE PROCEDURE [dbo].[sp_updateTransactions]
@Table dbo.tp_Transactions readonly,
@itemId bigint,
@platform char(1)
AS
BEGIN
MERGE Transactions AS TARGET
USING @Table AS SOURCE  
ON (    
TARGET.[itemId] …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server merge sql-delete

7
推荐指数
2
解决办法
4530
查看次数