asp.net 相關文章實現(xiàn)方法第2/2頁
更新時間:2009年05月28日 21:37:37 作者:
大家或許會覺得很驚訝:為什么靈感之源會討論SQL?或許應該這樣說吧:搞業(yè)務系統(tǒng),不跟SQL扯上關系似乎比較難。
解決方案2:原來的做法是文章表和關鍵字表,關鍵字表可能會存在大量重復的關鍵字,所以采用中間表,而關鍵字不再重復。
設計:首選要做的是在原有文章表(Details)的基礎上建立關鍵字表(DetailKeywords),字段包括ItemID(主鍵)和Keyword(關鍵字),還有中間表DetailsKeywords,包括DetailID(文章ID)和KeywordID(關鍵字ID)。以下是主要存儲過程:
UpdateRelatedDetails:更新關鍵字
復制代碼 代碼如下:
CREATE procedure dbo.UpdateRelatedDetails
@DetailID INT,
@Keywords NVARCHAR(500)
AS
SET NOCOUNT ON
EXEC DeleteRelatedDetails @DetailID
DECLARE @I INT
DECLARE @Keyword NVARCHAR(50)
DECLARE @KeywordID INT
SET @Keywords=REPLACE(@Keywords,',', ',')
SET @Keywords=REPLACE(@Keywords,';', ',')
SET @Keywords=RTRIM(LTRIM(@Keywords))
SET @I=CHARINDEX(',', @Keywords)
WHILE @I>=1
BEGIN
SET @Keyword=LEFT(@Keywords, @I-1)
EXEC AddRelatedDetailKeyword @DetailID, @Keyword
SET @Keywords=SUBSTRING(@Keywords, @I+1,LEN(@Keywords)-@I)
SET @I=CHARINDEX(',', @Keywords)
END
IF @Keywords<>''
EXEC AddRelatedDetailKeyword @DetailID, @Keywords
SET NOCOUNT OFF
GO
AddRelatedDetailKeyword:添加單個關鍵字
復制代碼 代碼如下:
CREATE procedure dbo.AddRelatedDetailKeyword
@DetailID INT,
@Keyword NVARCHAR(50)
AS
SET NOCOUNT ON
DECLARE @KeywordID INT
SELECT @KeywordID=ItemID FROM DetailKeywords WHERE Keyword=@Keyword
IF @KeywordID IS NULL
BEGIN
INSERT INTO DetailKeywords (Keyword) VALUES(@Keyword)
SET @KeywordID=IDENT_CURRENT('DetailKeywords')
END
INSERT INTO DetailsKeywords (DetailID, KeywordID) VALUES(@DetailID, @KeywordID)
SET NOCOUNT OFF
GO
DeleteRelatedDetails:刪除之前的關鍵字,存在點問題
復制代碼 代碼如下:
CREATE PROCEDURE dbo.DeleteRelatedDetails
@DetailID INT
AS
SET NOCOUNT ON
--這里還有其它東西沒有判斷和刪除
DELETE FROM DetailsKeywords WHERE DetailID=@DetailID
SET NOCOUNT OFF
GO
GetRelatedDetails:根據某文章ID獲取相關文章
復制代碼 代碼如下:
CREATE procedure dbo.GetRelatedDetails
@DetailID INT
AS
SELECT DISTINCT d.ItemID, d.Subject FROM Details d, DetailKeywords k, DetailsKeywords s
WHERE d.ItemID = s.DetailID AND k.ItemID=s.KeywordID AND d.ItemID<>@DetailID
GO
我貼一下性能比較,環(huán)境是30萬條記錄,機器是PIII 800+300多內存,硬盤是7200轉:
復制代碼 代碼如下:
--第1種,兩表情況
--select a.* from Article a,ArtKey2 b
--where a.ArtID=b.ArtID and b.KeyValue='科技9'
--第2種,三表情況
--select a.* from Article a,ArtKey1 b,
--(select KeyID from KeyValue where KeyValue='科技9') c
--where a.ArtID=b.ArtID and b.KeyID=c.KeyID
--第3種,三表情況
--select * from Article where ArtID in
--(select ArtID from ArtKey1 where KeyID in
--(select KeyID from KeyValue where KeyValue='科技9'))
優(yōu)化Sql語句主要是通過在“執(zhí)行計劃”圖所顯示的IO成本,以及cpu成本來分析執(zhí)行效率。在SQL查詢分析器的執(zhí)行計劃中,IO成本+CPU成本=本步成本。
三種SQL語句在同一批處理中的執(zhí)行分析結果:
1、占14.22%,實際執(zhí)行成本為2.96。
2、占43.08%,實際執(zhí)行成本為9.96。
3、占42.70%,實際執(zhí)行成本為8.88。
第一種執(zhí)行成本遠小于后者,且執(zhí)行計劃也比后者簡潔得多,顯然第一種要優(yōu)于其它兩種。執(zhí)行計劃簡潔不是優(yōu)越的標準,但SQL語句寫得不夠簡潔,通常是為了滿足業(yè)務需求不得已寫出復雜語句。第2種與種3種的執(zhí)行計劃只是在最后一步不同,前者是inner join,后者是Right Semi Join。
相關文章
asp.net+sqlserver實現(xiàn)的簡單高效的權限設計示例
大部分系統(tǒng)都有權限系統(tǒng)。一般來說,它能管控人員對某個否頁面的訪問;對某些字段、控件可見或者不可見。對gridview中的數(shù)據是否可刪除、可添加、可新增等等。2010-04-04
.net 獲取瀏覽器Cookie(包括HttpOnly)實例分享
這篇文章介紹了.net 獲取瀏覽器Cookie(包括HttpOnly)實例,有需要的朋友可以參考一下2013-10-10
asp.net MVC實現(xiàn)無組件上傳圖片實例介紹
無組件實現(xiàn)上傳圖片使用input的file作為上傳選擇文件,具體實現(xiàn)如下:前后臺代碼很詳細,感興趣的朋友們可不要錯過了哈2013-05-05
.NET 6.0 + WPF 使用 Prism 框架實現(xiàn)導航
Prism是一款專為XAML應用程序設計的開源框架,主要面向WPF和Xamarin Forms等平臺,文章介紹了Prism的基本概念、安裝步驟和使用方法,是開發(fā)企業(yè)級應用程序的首選框架,感興趣的朋友跟隨小編一起看看吧2024-09-09

