1
我有一個存儲過程,根據文章的標題查找文章。但是我也需要在同一個表中增加一列來計算文章被查看的次數。沒有多次查找返回數據和更新行?
試圖儘可能地高效,我看到了兩個可能的方法來處理這個:
執行一個SELECT來獲得對目標行的PK。然後使用該PK來增加視圖的數量,最後使用PK返回文章數據。
執行一個SELECT文章數據返回到我的應用程序,然後使用返回的PK再拍往返於數據庫遞增的若干意見。
我知道#1會很快,但它是三次查找。 #2需要兩次往返數據庫。有沒有辦法來優化這個任務?
編輯意見的基礎上,我提出了以下幾點。感謝您的任何評論或建設性的批評。
DECLARE @Slug VARCHAR(250) -- Stored procedure argument
-- declare @UpdatedArticle table variable
DECLARE @UpdatedArticle TABLE
(
ArtID INT,
ArtUserID UNIQUEIDENTIFIER,
ArtSubcategoryID INT,
ArtTitle VARCHAR(250),
ArtHtml VARCHAR(MAX),
ArtDescription VARCHAR(350),
ArtKeywords VARCHAR(250),
ArtLicenseID VARCHAR(10),
ArtViews BIGINT,
ArtCreated DATETIME2(7),
ArtUpdated DATETIME2(7)
);
UPDATE Article
SET ArtViews = ArtViews + 1
OUTPUT
INSERTED.ArtID,
INSERTED.ArtUserID,
inserted.ArtSubcategoryID,
INSERTED.ArtTitle,
INSERTED.ArtHtml,
INSERTED.ArtDescription,
INSERTED.ArtKeywords,
INSERTED.ArtLicenseID,
INSERTED.ArtViews,
INSERTED.ArtUpdated,
INSERTED.ArtCreated
INTO @UpdatedArticle
WHERE ArtSlugHash = CHECKSUM(@Slug) AND ArtSlug = @Slug AND ArtApproved = 1
SELECT a.ArtID, a.ArtUserID, a.ArtTitle, a.ArtHtml, a.ArtDescription, a.ArtKeywords, a.ArtLicenseID,
l.licTitle, a.ArtViews, a.ArtCreated, a.ArtUpdated, s.SubID, s.SubTitle, c.CatID, c.CatTitle,
sec.SecID, sec.SecTitle, u.UsrDisplayName AS UserName
FROM @UpdatedArticle a
INNER JOIN Subcategory s ON a.ArtSubcategoryID = s.SubID
INNER JOIN Category c ON s.SubCatID = c.CatID
INNER JOIN [Section] sec ON c.CatSectionID = sec.SecID
INNER JOIN [User] u ON a.ArtUserID = u.UsrID
INNER JOIN License l ON a.ArtLicenseID = l.LicID
謝謝,我不熟悉這一點。我會很感激我的修改後的代碼的任何意見,我已經附加到我的問題。此外,它似乎工作正常,當沒有行匹配的初始標準,但要確保我不丟失任何東西。 – 2011-01-29 06:51:43