PDA

View Full Version : بهینه سازی یک روال



FirstLine
جمعه 30 بهمن 1383, 10:16 صبح
با سلام
در SQL 2000 یک روال دارم لطفا راهنمایی کنید تا
1- روال را بهینه سازی کنم تا سرعت آن بالا رود
2- من این روال را از داخل یک روال(با یک کرزر تمام بانک را از ابتدا تا انتها میخواند) دیگه و در یک حلقه قرار داده و execute میکنم چه کدی به این روال اضافه کنم تا اگر این روال با پیغام خطا روبرو شد عملیات حلقه ای که این روال در آن execute میشود متوقف نشود؟


/* Check whether the sp already exists and
drop it if it does */
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'dad_Law_Mortabet_List' AND type = 'P')
DROP PROCEDURE dad_Law_Mortabet_List
GO


-- Create the procedure
CREATE PROCEDURE dad_Law_Mortabet_List @v_Law_Code [bigint] --, @SUM int OUTPUT , @v_i int OUTPUT
AS
--Read Law_Title
Declare @v_Str_Title nvarchar (500)
SELECT @v_Str_Title=Law_Title FROM Law_Laws WHERE Law_Code=@v_Law_Code

Set @v_Str_Title= '"'+ @v_Str_Title + '"'
Print @v_Str_Title


INSERT INTO Law_Mortabet (Mortabet_LawCode_Main, Mortabet_LawCode_Target) SELECT @v_Law_Code,Law_Code FROM Law_Laws WHERE CONTAINS(Law_Text, @v_Str_Title )
GO

با تشکر

AminSobati
جمعه 30 بهمن 1383, 23:28 عصر
دوست عزیزم،
در مورد بهینه سازی، این کد مشکلی نداره. تنها کمکی که میشه کرد ساختن یک ایندکس به این شکله:

CREATE INDEX IX_MyIndex_1 ON Law_Laws(Law_Code,Law_Title)
وجود این ایندکس در حجم اطلاعات کم، چندان محسوس نیست ولی در تعداد رکوردهای بالا به شدت تفاوت ایجاد میکنه.
و اما در مورد توقف کد به هنگام بروز خطا:
1) هر خطایی باعث توقف اجرای کد نمیشه
2) گاها نوع خطا مهم هست و الزاما باید کد متوقف بشه

اگر نوع خطایی که براتون پیش میاد مشخص بشه، بهتر میتونیم در موردش تصمیم بگیریم.
موفق باشید

esi022
یک شنبه 02 اسفند 1383, 06:51 صبح
با اجازه aminsobati
برای اینکه کدت در صورت بروز خطا اصلا اجرا نشه

sql = "begin transaction "
sql = sql & "insert into ................................................"
sql = sql & " IF @@ERROR <> 0 "
sql = sql & " ROLLBACK TRANSACTION "
sql = sql & "ELSE "
sql = sql & " COMMIT TRANSACTION "

AminSobati
یک شنبه 02 اسفند 1383, 17:03 عصر
توصیه من اینه که سعی کنید ریشه اشکال رو حتما پیدا کنین، بوسیله Debug کردن SP