我想问一下是否有一种快速的方法可以将最后的'x'插入数据库中。
例如,我有一个应用程序,用户可以通过该应用程序搜索项目,我希望保留每个用户所做的最后10次搜索。我不想将他的所有搜索都保留在数据库中,因为这会增加db_size。有没有快速的方法只保留我的数据库中的最新10次搜索,或者我每次都要检查:
A)到目前为止,已在数据库中存储了多少次搜索
B) if(searching = 10)删除最后一行
C)插入新行
我认为这种方式会对性能产生影响,因为它需要对数据库进行3次不同的访问:检查,删除和插入
答案 0 :(得分:0)
我认为这不是一种简单/快捷的方法。根据您的条件,我创建了以下存储过程。
我考虑过要存储数据的SearchContent
。
CREATE TABLE SearchContent (
Id INT IDENTITY (1, 1),
UserId VARCHAR (8),
SearchedOn DATETIME,
Keyword VARCHAR (40)
)
在传递UserId, Keyword
的存储过程中进行计算。程序将是,
CREATE PROCEDURE [dbo].[pub_SaveSearchDetails]
(
@UserId VARCHAR (8),
@Keyword VARCHAR (40)
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Count AS INT = 0;
-- A) how many searches has been stored on database so far
SELECT @Count = COUNT(Keyword) FROM SearchContent WHERE UserId = @UserId
IF @Count >= 10
BEGIN
-- B) if (searches = 10) delete last row
DELETE FROM SearchContent WHERE Id IN ( SELECT TOP 1 Id FROM SearchContent WHERE UserId = @UserId ORDER BY SearchedOn ASC)
END
-- C) insert new row
INSERT INTO SearchContent (UserId, SearchedOn, Keyword)
VALUES (@UserId, GETDATE(), @Keyword)
END
示例执行:EXEC pub_SaveSearchDetails 'A001', 'angularjs'