asp.net 相關(guān)文章實(shí)現(xiàn)方法第2/2頁(yè)
更新時(shí)間:2009年05月28日 21:37:37 作者:
大家或許會(huì)覺(jué)得很驚訝:為什么靈感之源會(huì)討論SQL?或許應(yīng)該這樣說(shuō)吧:搞業(yè)務(wù)系統(tǒng),不跟SQL扯上關(guān)系似乎比較難。
解決方案2:原來(lái)的做法是文章表和關(guān)鍵字表,關(guān)鍵字表可能會(huì)存在大量重復(fù)的關(guān)鍵字,所以采用中間表,而關(guān)鍵字不再重復(fù)。
設(shè)計(jì):首選要做的是在原有文章表(Details)的基礎(chǔ)上建立關(guān)鍵字表(DetailKeywords),字段包括ItemID(主鍵)和Keyword(關(guān)鍵字),還有中間表DetailsKeywords,包括DetailID(文章ID)和KeywordID(關(guān)鍵字ID)。以下是主要存儲(chǔ)過(guò)程:
UpdateRelatedDetails:更新關(guān)鍵字
復(fù)制代碼 代碼如下:
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:添加單個(gè)關(guān)鍵字
復(fù)制代碼 代碼如下:
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:刪除之前的關(guān)鍵字,存在點(diǎn)問(wèn)題
復(fù)制代碼 代碼如下:
CREATE PROCEDURE dbo.DeleteRelatedDetails
@DetailID INT
AS
SET NOCOUNT ON
--這里還有其它東西沒(méi)有判斷和刪除
DELETE FROM DetailsKeywords WHERE DetailID=@DetailID
SET NOCOUNT OFF
GO
GetRelatedDetails:根據(jù)某文章ID獲取相關(guān)文章
復(fù)制代碼 代碼如下:
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萬(wàn)條記錄,機(jī)器是PIII 800+300多內(nèi)存,硬盤是7200轉(zhuǎn):
復(fù)制代碼 代碼如下:
--第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語(yǔ)句主要是通過(guò)在“執(zhí)行計(jì)劃”圖所顯示的IO成本,以及cpu成本來(lái)分析執(zhí)行效率。在SQL查詢分析器的執(zhí)行計(jì)劃中,IO成本+CPU成本=本步成本。
三種SQL語(yǔ)句在同一批處理中的執(zhí)行分析結(jié)果:
1、占14.22%,實(shí)際執(zhí)行成本為2.96。
2、占43.08%,實(shí)際執(zhí)行成本為9.96。
3、占42.70%,實(shí)際執(zhí)行成本為8.88。
第一種執(zhí)行成本遠(yuǎn)小于后者,且執(zhí)行計(jì)劃也比后者簡(jiǎn)潔得多,顯然第一種要優(yōu)于其它兩種。執(zhí)行計(jì)劃簡(jiǎn)潔不是優(yōu)越的標(biāo)準(zhǔn),但SQL語(yǔ)句寫得不夠簡(jiǎn)潔,通常是為了滿足業(yè)務(wù)需求不得已寫出復(fù)雜語(yǔ)句。第2種與種3種的執(zhí)行計(jì)劃只是在最后一步不同,前者是inner join,后者是Right Semi Join。
相關(guān)文章
未在本地計(jì)算機(jī)上注冊(cè)“microsoft.ACE.oledb.12.0”提供程序報(bào)錯(cuò)的解決辦法
這篇文章主要給大家介紹了關(guān)于未在本地計(jì)算機(jī)上注冊(cè)“microsoft.ACE.oledb.12.0”提供程序報(bào)錯(cuò)的完美解決辦法,需要的朋友可以參考下2019-03-03asp.net使用JS+form表單Post和Get方式提交數(shù)據(jù)
今天小編就為大家分享一篇關(guān)于asp.net使用JS+form表單Post和Get方式提交數(shù)據(jù),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01IIS故障(Connections_Refused)問(wèn)題分析及處理
這幾天某地市Web服務(wù)器連續(xù)多次出現(xiàn)故障問(wèn)題(Connections_Refused),正好借這個(gè)案例向大家詳細(xì)介紹下,需要了解的朋友可以參考下2012-12-12asp.net 無(wú)刷新分頁(yè)實(shí)例代碼
asp.net 無(wú)刷新分頁(yè)實(shí)例代碼,需要的朋友可以參考一下2013-03-03asp.net上傳圖片保存到數(shù)據(jù)庫(kù)的代碼
有時(shí)候某種需要將圖片保存到數(shù)據(jù)庫(kù)中,那么下面的代碼就可以參考下,下面沒(méi)有數(shù)據(jù)庫(kù)的建表說(shuō)明,但數(shù)據(jù)庫(kù)需要建立下。2010-07-07頁(yè)面間隔半秒鐘更新時(shí)間 Asp.net使用Comet開(kāi)發(fā)http長(zhǎng)連接示例分享
Comet(Reverse AJAX)主要是通過(guò)HTTP長(zhǎng)連接, 保持和服務(wù)器的連接,實(shí)現(xiàn)Server PUSH 和雙向通信,下面通過(guò)示例學(xué)習(xí)他的使用方法2014-01-01.net泛型通用函數(shù)的特殊問(wèn)題的解決方法
本文介紹了.net泛型通用函數(shù)的特殊問(wèn)題的解決方法,需要的朋友可以參考一下2013-02-02