我的表中包含一些买入/卖出数据,其中包含大约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) 我正在尝试编写一个查询SQL Server数据库的异步服务器,并担心我的数据库端过于同步.具体来说,我可以ExecuteReader异步调用但不能reader.Item异步调用,并且是花费57%的时间(阻止我的宝贵线程!).
这是我用ADO.NET做的最异步的,还是有异步方法reader.Item呢?
基本上我需要获得在StaffOnGrade中出现超过2次的CampaignTitles列表,并列出等级等级高于2的CampaignTitle,StaffNo
WorksOn表:
CampaignTitle | StaffNo
-------------------|--------
ADVENTURE WORLD | 11
AIR CANADA | 11
CARNIVAL CRUISES | 3
CARNIVAL CRUISES | 8
CARNIVAL CRUISES | 9
FLIGHT CENTRE | 7
FLIGHT CENTRE | 10
HARVEYWORLD TRAVEL | 4
LAST MINUTE | 4
PRINCESS CRUISES | 3
PRINCESS CRUISES | 5
PRINCESS CRUISES | 6
PRINCESS CRUISES | 7
PRINCESS CRUISES | 11
TRAVELSCENE | 10
VALUETOURS AUST | 3
VIRGIN AUSTRALIA | 10
Run Code Online (Sandbox Code Playgroud)
StaffOnGrade表:
Grade | StaffNo
------|--------
1 | …Run Code Online (Sandbox Code Playgroud) 我正在运行删除声明:
DELETE FROM TransactionEntries
WHERE SessionGUID = @SessionGUID
Run Code Online (Sandbox Code Playgroud)
删除的实际执行计划是:
Execution Tree
--------------
Clustered Index Delete(
OBJECT:([GrobManagementSystemLive].[dbo].[TransactionEntries].IX_TransactionEntries_SessionGUIDTransactionGUID]),
WHERE:([TransactionEntries].[SessionGUID]=[@SessionGUID])
)
Run Code Online (Sandbox Code Playgroud)
该表是聚集的SessionGUID,因此240行在物理上在一起.
该表没有触发器.
该操作需要:
该表包含11个索引:
SessionGUID)我怎么能弄清楚为什么这个delete操作正在执行14,340读取,需要11秒?
Avg. Disk Read Queue Length河段0.8Avg. Disk sec/Read不超过4msAvg. Disk Write Queue Length河段0.04Avg. Disk sec/Write不超过4ms 其他读物有哪些?执行计划没有说明它正在阅读什么.
更新:
EXECUTE sp_spaceused TransactionEntries
TransactionEntries
Rows 6,696,199
Data: …Run Code Online (Sandbox Code Playgroud) 我想创建以下索引视图:
CREATE VIEW [Cic].[vwMarker] WITH SCHEMABINDING
AS
Select
SubId,
marker.EquipmentID,
marker.ReadTime,
marker.CdsLotOpside,
marker.CdsLotBackside,
marker.CdteLotOpside,
marker.CdTeLotBackside
From dbo.Marker
Where dbo.Marker.ReadTime >= Convert(dateTime,'10/5/2011',120)
GO
CREATE UNIQUE CLUSTERED INDEX IX_vwMarker_ReadTime_EquipmentID
ON Cic.vwMarker (ReadTime, EquipmentID);
Run Code Online (Sandbox Code Playgroud)
这很好用.但是,我真正想要做的是在此视图中仅包含两天或更新的行,从查询视图的当前日期/时间开始.我找不到这样做的方法,因为我不能在Where谓词中使用GetDate(),因为它是非确定性的.换句话说,我想做这样的事情,但不能:
Where dbo.Marker.ReadTime >= Convert(dateTime,DateAdd(dd,-2,GetDate()) ,120)
Run Code Online (Sandbox Code Playgroud)
有没有解决的办法?
我有Erlang R14B04(在centos下),它应该与MS SQL Server 2008(在Windows下)通信.有人可以分享这个未知领域的经验吗?据我所知,没有像jdbc这样的驱动程序但是对于erlang?我应该使用什么驱动程序?我看到有些人使用odbc这个帖子并得到负面反馈.有人可以证实吗?
SQL Server的散列函数HASHBYTES的输入限制为8000字节.
你如何散列更大的字符串?
使用Sql Server
我想从两个表中获得最大值
表格1
ID Total
101 100
102 600
.....
Run Code Online (Sandbox Code Playgroud)
表2
ID Total
101 300
102 400
....
Run Code Online (Sandbox Code Playgroud)
我希望根据id从2表中获取最大值
预期产出
ID Total
101 300 (max value in table2)
102 600 (max value in table1)
....
...
Run Code Online (Sandbox Code Playgroud)
如何进行查询
需要查询帮助
如何在SQL触发器中获取更新记录的值 - 如下所示:
CREATE TRIGGER TR_UpdateNew
ON Users
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
EXEC UpdateProfile (SELECT UserId FROM updated AS U);
END
GO
Run Code Online (Sandbox Code Playgroud)
显然这不起作用,但你可以看到我想要的东西.
我有一个数据库表,将图像存储为varbinary(max).这对我很有用.但是,我现在必须将此数据发送到必须使用Image数据类型的MS Dynamics数据库.
将varbinary(max)保存到图像时,我需要注意什么?我的数据可以被破坏,或者它们通常是所有意图和目的的相同数据类型吗?
谢谢
sql-server ×10
sql ×3
t-sql ×3
ado.net ×1
c# ×1
erlang ×1
f# ×1
image ×1
indexed-view ×1
merge ×1
sql-delete ×1
sqlclr ×1
triggers ×1