ایران سرفراز- نرم افزار وپروژهای دانشجویی


نرم افزار وپروژهای دانشجویی

ارائه الگوریتمی برای بهینه سازی پرس و جوهای تو در تو

 

 

ارائه الگوریتمی برای بهینه سازی پرس و جوهای تو در تو

mohsen_mahyar@yahoo.com

mo-mah.persianblog.ir

چکیده

بهینه سازی پرس و جوهای تودرت و ی پیچیده، مشگل است، خصوصا اگر از توابع تعریف شده کاربر در پرس و جو استفاده

شده باشد . بیشترین روشی که برای بهینه سازی پرس و جوهای تودرتو پیشنهاد شده، تبدیل پرس و جو از حالت تودرتویی به شکل

غیر تودرتو اس ت . اما این روش همیشه اجرایی و مناسب نمی باشد، همچنین اگر پرس و جو از توابع تعریف شده کاربر استفاده نماید

تبدیل سخت تر هم می شو د . در این تحقیق نشان داده می شود روشهای موجود برای پردازش پرس و جو و زیر پرس و جوهای

به دلیل این که دستورات داخل ت و ابع برای هر سطر از پرس و جوی فراخواننده (SELECT شامل توابع تعریف شده کاربر (در شرط

بطور مستقل اجرا می گردند، موثر نیستن د . سپس یک روش برای بهینه سازی پرس و جوها و زیر پرس و جوهایی که شامل توابع

تعریف شده کاربر هستند در قالب الگوریتم ارائه می گرد د . در نهایت، یک بهینه ساز شبیه سازی می شود و نتایجش د ر محیط

ثبت می گردد که صحتی بر خاصیت این تحقیق می باشد. Microsoft SQL Server

کلمات کلیدی

بهینه سازی پرس و جو، بهینه سازی پرس و جوهای تو در تو ، توابع تعریف شده کاربر، غیر همبستگی، غیر تودرتویی.

2

۱- مقدمه

ما از بهینه سازی پرس و جو برای حل مسائل زیادی استفاد ه می

کنیم. زمانی که یک پرس و جو مطرح می شود، سیستم مدیریت

بانک اطلاعات می تواند از روش های مختلفی برای پردازش آن

پرس و جو و رسیدن به جواب استفاده کند . همه آن روش ها در

نهایت یک نتیجه را تولید می کنند ولی از نظر هزینه های انجام

شده مانند کل زمان مورد نیاز برای اجرا متفاوت اند . چه روشی

حداقل زمان را برای اجرا نیاز دارد؟ در زمینه بانک اطلاعات،

محدوده بهینه سازی پرس و جوها بسیار وسیع است . این مورد از

زوایای مختلفی می تواند مطالعه و بررسی شود، که در هر مورد به

بخش های متعددی تقسیم می شود، هدف این تحقیق بررسی

روشهای بهینه سازی پرس و جوهای تودرتو (پرس و جوهایی که

دارای زیر پرس و جو هستند ) و ارائه روشی برای بهینه سازی

پرس و جوها و زیرپرس و جوهایی که شامل توابع تعریف شده

کاربر هستند . بیشترین روشی که برای بهینه سازی پرس و

جوهای تودرتو پیشنهاد شده است [ 11,14 ] تبدیل پر س و جو از

حالت تودرتویی به شکل غیر تودرتو است . اما این روش همیشه

اجرایی و مناسب نمی باشد، همچنین اگر پرس و جو از توابع

تعریف شده کاربر استفاده نماید تبدیل سخت تر هم می شود . به

پرس و جوی مثال زیر که از یک تابع تعریف شده کاربر در

استفاده می نماید توجه کنید. SELECT قسمت

که شامل سه TestTree مثال : ساختار درختی هر نود جدول

فیلد نام گره ، پدر گره و شرح گره میباشد را مشخص نمایید.

SELECT dbo.fullname(@nodeid)

FROM TestTree

CREATE FUNCTION dbo.fullname (@nodeid int)

RETURNS varchar(500) AS

BEGIN

declare @pid int

declare @Str varchar(500)

declare @CurrentName varchar(500)

SET @Str = ''

SELECT @Pid = ParentId , @CurrentName =

NodeName

FROM TestTree

WHERE NodeId = @nodeid

SET @Str = @CurrentName

WHILE (@PId <>0)

BEGIN

SELECT @PId = ParentId,@CurrentName =

NodeName

FROM TestTree

WHERE NodeId = @PId

SET @Str = @CurrentName + ' -> ' +@Str

END

RETURN @Str

END

روش بهینه سازی ارائه شده در این تحقیق برای چنین پرس و

جوهایی طرحهایی را بواسطه ساختار پارامترهای موجود در بدنه

تابع تولید می کند که موثرتر از تعامل تودرتوی ساده میباشد.

سایر بخش های این تحقیق به این صورت سازماندهی شده

اند : بخش ۲ پیشینه این تح قیق شرح داده شده است . عملکرد

پرس و جوهای تودرتو و روش بهینه سازی پرس و جوهایی که

شامل توابع تعریف شده کاربر هستند در بخش ۳ مطرح می

گردد. سپس در بخش ۴ این روش را مورد آزمایش و ارزیابی قرار

می دهیم و نتایجش را ثبت می کنیم، سرانجام پیشنهاداتی برای

تحقیقات آینده مطرح می کنیم.

۲- پیشینه تحقیق

تحقیقات بسیار زیادی در زمینه بهینه سازی پرس و جوهای

تودرتو انجام گرفته است که بیشترین آنها بر غیر تودرتویی پرس

و جوها تاکید دارند. برای غیر تودرتویی پرس و جوهایی که درگیر

گزاره های عطفی می باشند در [ 11,14 ] به درستی مشخص شده

که SQL است ، اما اخیر ًا [ 2] به غیر تودرتویی پرس و جوهای

شامل گزاره های فصلی می باشد اشاره شده است . شروع روش

داخل جبر رابطه ای توسعه یافته با SQL مطرح شده تبدیل

عملگرهای انشعابی است . سپس اجرای معادلهای غیر تودرتوی

جدید که با ترکیبات فصلی بوجود می آید . همانگونه که اشاره شد

روش غیر تودرتویی مذکور فقط برا ی پرس و جوهای ی که شامل

گزاره ها ی فصل ی می باشند کاربرد دارد و با برخی از عملگرها

خصوصا عملگرهای منفی مشکل دارد و نمی توان اطمینان داشت

که در همه شرایط پرس وجو را از حالت تودرتویی خارج می سازد

و به معادل بهتری تبدیل می کند.

غیر تودرتویی زیر پرس وجوها را م ؤثر نمی داند [ 4] و یک Cao

SQL روش رابطه ای تودرتو برای پردازش زیر پرس وجوهای

پیشنهاد می کند . این روش توانایی رسیدگی کردن به پرس

وجوهای تودرتو از هر نوع و هر سطحی دارد (با استفاده از جبر

رابطه ای تودرتو ). انگیزه استف اده از جبر رابطه ای تودرتو آنست

که نتیجه یک زیر پرس وجو یک مجموعه ای از سطرهاست

(وقتی که توابع غیر جمعی هستند )، که در مدل رابطه ای تودرتو

می تواند همانند مجموع مقدار صفت مشخصه رفتار کند . بنابراین

مقایسه بین یک صفت مشخصه و نتیجه یک زیر پرس وجو می

تواند به و سیله مقایسه کردن یک صفت با یک مجموعه مقدار

SELECTION صفت به انجام برسد که با اندکی تغییرات عملگر

در جبر رابطه ای تودرتو حاصل می شود . بصورت کلی روش رابطه

ای تودرتوی توضیح داده شده [ 4]، در ابتدا غیر تودرتویی یک

پرس و جوی تودرتو بوسیله استرات ژی های غیر تودرتو ی رایج و

سپس استفاده از جبر رابطه ای توسعه یافته بنابر محاسبه گزاره

3

های درگیر زیر پرس وجوها، از پایین به بالا انجام می گردد. روش

رابطه ای تودرتو برای پرس وجوهایی که درگیر گزاره های منفی

هستند مناسب است ، اما در مورد پرس وجوهایی که شامل گزاره

های مثبت و توابع تعریف شده کاربر هستند برتری ویژه ای ندارد.

اعتقاد دارد اگرچه غیرهمبستگی اغلب نتایج Guravannavar

(طرحهای غیرتودرتو ) ارزانتری دارد ، ولی همیشه برای زیر پرس

وجوهای تودرتو کاربردی نمی باشد [ 9]. و اگر تعامل تودرتو

بدرستی پیاده سازی شود بر غیرهمبستگی برای چندین رده از

پرس وجوها غلبه می کند . همچنین تاکید داشت غیرهمبستگی

برای اجرای تعامل تودرتو در رویه ها و توابع تعریف شده کاربر

سخت است . بدینسان روشی پیشنهاد کرد که به اجرای تعامل

تودرتو با استفاده از پارامتر ترتیب مرتب ساز ی تسریع بخشد .

تکنیکی که برای این روش در نظ ر گرفته شده است مرتب سازی

پرس وجوی بیرونی با ملاحظه عبارات موجود در بدنه تابع (پرس

وجوی درونی) است.

۳- روش بهینه سازی پرس و جوهایی که

شامل توابع تعریف شده کاربر هستند

ما در این بخش روشی برای بهینه سازی پرس و جوهایی که

شامل توابع تعریف شده کاربر هستند، ارائه م ی دهیم . اما قبل از

پرداختن به این موضوع ابتدا عملکرد زیر پرس و جوهای تودرتو

را مورد بررسی قرار می دهیم.

۱- عملکرد زیر پرس و جوهای تودرتو -۳

بصورت مفهومی با زیر پرس و جو ها که در بخش شرط SQL

قرار دارند، شبیه به یک تابع رفتار می کند که Where موجود در

این تابع پار امترهایی را می گیرد و مقدار یا مقادیری (یا احتمالا

یک مجموعه تهی ) را بعنوان نتیجه بر م ی گرداند . پارامترها

متغیرهایی از سطح بالاتر هستند که در بخش زیر پرس و جو

های تودرتو استفاده می شوند (به این متغیرها متغیرهای

همبستگی می گویند ). بصورت مفهومی زیر پرس و جو می تواند

شبیه یک تابع دیده شود که یک پارامتر را می گیرد و مجموعه

ای از تمام مقدارهای ی که نامشان مشابه پارامتر است را بر می

تمام پرس وجو را با محاسبه یک ضرب کارتزین SQL . گرداند

ارزیابی می کند . این کار با ضرب رابطه های موجود در بخش

انجام میشود . تک تک سطرهای موجود را با شرط From بیرونی

تست می کند. این تکنیک برای ارزیابی where موجود در بخش

پرس و جوها با وجود زیر پرس و جو های تو درتو را ارزیابی

وابسته می گویند. ارزیابی وابسته خیلی کار آمد نیست چون زیر

پرس و جو بطور جدا گانه برای هر سطر از سطح خارجی پرس و

خواهد I/O جو ارز یابی می شود . و نتیجه تعداد زیادی از عملیات

سپس سعی می کنند که زیر پرس و SQL بود. بهینه سازهای

جو های تو در تو را در صورت امکان به عملیات پیوند تبدیل

I/O کنند. الگوریتمهای کار آمد پیوند از بالا رفتن هزینه

جلوگیری می کنند . اگر تبدیل امکان پذیر نبا شد، بهینه ساز زیر

پرس و جو ها را بصورت عبارتهای مستقل در نظر گرفته آنها را

بصورت مجزا بهینه می کند و سپس آنها را با هم و بصورت

وابسته و مرتبط ارزیابی می کند.

۲- روشی برای کاهش ارجاع به توابع -۳

برای بررسی یک پرس و جو از روش پایین به بالا استفاده SQL

که محدودیت هایی در WHERE می کند یعنی در ابتدا شرط

پرس و SELECT تعداد سطرها اعمال می کند ، و سپس شرط

جو را بررسی می کند . این روش بر اساس قوانین بهینه سازی

پرس و جو می باشد ، و در حالت کلی، زمانی که از پرس وجوهای

ساده استفاده می شود، بهترین روش پیمایش یک پرس وجو

موجود در پرس SELECT است. ازاینرو هنگامیکه تابع در شرط

و جو ظاهر می شود و محدودیتی در پرس و جوی فراخواننده

تابع اعمال نشده باشد، تابع به ازای تمامی سطرها اجرا می شود .

ما در این بخش ثابت می کنیم در بسیاری از حالات (مانند مثال

بخش ۱) که پرس وجو از توابع تعریف شده کارب ر استفاده می

کند روش فوق کم اثر است، غیر همبستگی برای چنین پرس و

جوهایی موثر نمی باشد و روش بهینه سازی ارائه شده در این

بخش با توجه به اینکه مراجعات پرس وجو به توابع تعریف شده

کاربر را در حالات مختلفی کاهش می دهد، نتایج بهتری نسبت

به روشهای رایج دارد.

۱- شرایط کاهش ارجاع به توابع -۲ -۳

در شرایط زیر می توان مراجعات پرس وجو به تابع را کاهش داد:

- پارامتر ارسالی در نتیجه تابع بی تاثیر باشد.

- پارامتر ثابت، به تابع فرستاده شود . یعنی (به ازای سطرهای

مختلف پرس و جو، پارامتر ثابت باشد در نتیجه خروجی تابع نیز

ثابت است)

- به ازای جمیع مقادیر مختلفی که تابع از طریق پارامتر دریافت

می کند و نتیجه یکسانی (یا تقریبا یکسانی) بر می گرداند.

- پارامتر ارسالی ترکیبی از ثابت و متغیر باشد . (بدینسان نتیجه

نیز در حالت کلی ترکیبی از ثابت و متغیر است)

۲- الگوریتم کاهش ارجاع به توابع -۲ -۳

به پرس وجوی مثال بخش ۱ توجه کنید.

این پرس وجو دو ویژگی دارد :

۱- از تابع تعریف شده کاربر استفاده می نماید.

۲- در بدنه تابع ، پرس وجوی فراخواننده تابع با محدودیت بوسیله

mohsen_mahyar@yahoo.com

mo-mah.persianblog.ir

4

فراخوانی می شود. where آرگومان تابع در شرط

پرس وجو باشند ، برای هر سطر از select زمانیکه توابع در شرط

پرس وجوی فراخواننده اجرا می گردند ، ما اثبات می کنیم

هنگامیکه پرس وجو از محدودیتهای ذکر شده استفاده می نماید

اجرای تابع برای هر سطر بصورت مستقل روش موثری نیست.

در این حالت پرس وجو ، با در نظر گرفتن بدنه تابع و

محدودیتهای فوق می بایستی ابتدا ت شخیص دهد کدام یک از

شرایط فوق برای ارتباط با تابع صدق می کند سپس طبق

الگوریتم زیر بسیاری از ارجاعات پرس و جو به تابع کاهش می

یابد.

INPUT : A query with user defined function

OUTPUT : The result of the query

PROCEDURE REDUCER (query,function)

BEGIN

OPEN function

FOR @variables BEGIN

IF @variable IS INACTIVE BEGIN

COMPUTE function once

OPEN query

COUNT(rows)

SHOW { { به اندازه سطرهای باقی مانده

CLOSE query

END

IF @vaiable IS ACTIVE BEGIN

IF @variable IS CONSTANT BEGIN

COMPUTE function WITH variable

OPEN query

COUNT(rows)

SHOW { { به اندازه سطرهای باقی مانده

CLOSE query

END

IF @variable IS VARIANT BEGIN

IF @variable EXIST CONDITION

BEGIN

RANGE(condition)

OMPUTE function IN condition range

OPEN query

COUNT(rows)

SHOW { { به اندازه سطرهای باقی مانده

CLOSE query

END

IF @variable IS EQUAL BEGIN

RANGE(equal)

COMPUTE function IN equal range

OPEN query

COUNT(rows) FOR equal

SHOW { { به اندازه سطرهای باقی مانده

CLOSE query

END

END

END

END

CLOSE function

END

توضیح الگوریتم: در این الگوریتم نشان داده می شود در

صورتیکه پارامتر در اجرای تابع بی تاثیر باشد ، بدنه تابع مستقل

از پرس و جوی فراخواننده فقط یکبار اجرا می گردد و نتایجش

برای مابقی سطرها نمایش داده می شود یا اگر پارامتر تاثیر گذار

باشد و مقدارش ثابت در نظر گرفته شده باشد باز هم بدنه تابع

مستقل از پرس و جوی فرا خواننده یک مرتبه و با مقدار دریافتی

از پارامتر اجرا می گردد و نتایجش برای مابقی سطرها نمایش

داده می شود. اما اگر پارامتر ارسالی به تابع تاثیر گذار باشد و

مقدارش نیز متغیر (یا ترکیبی از ثابت و متغیر ) باشد در حالاتی

که داخل بدنه تابع این متغیرها بصورت جملات شرطی یا برای

تعداد زیادی از سطرها ثابت باشد بازهم تعداد مراجعات به تابع

توسط پرس و جوی فراخواننده کاهش می یابد. پارامتر تابع پرس

و جوی مثال ۱ متغیر تاثیر پذیر است . به دلیل اینکه این پارامتر

در تعداد زیادی از سطرها مقدارش ثابت است بنابراین طبق

الگوریتم فوق تنها برای تعداد محدودی از سطرها کافیست اجرا

شود و نتایج آن برای بقیه سطرها به نمایش در می آید. برای

۱۰۰۰۰۰ باشد و ،TestTree مثال اگر تعداد سطرهای جدول

به غیر از ۶ سطر برای بقیه سطرها مقدار ۵ در ParentId فیلد

نظر گرفته شده است در روشهای قبلی تابع برای ۱۰۰۰۰۰ رکورد

اجرا میگردید اما با استفاده از این الگوریتم فقط کافیست برای ۶

ParentId سطر اجرا گردد و نتایجش برای سطرهایی که مقدار

آنها برابر ۵ است نمایش داده شود.

مزایا: کاهش زمان اجرا (کاهش تعداد دفعات اجرا پرس و جوی

درونی) ، کاهش زمان ارتباط (بین پرس و جوی بیرونی و درونی)

، کاهش زمان تنظیمات متغیرها.

معایب: در شرایطی که مقدار مساوی برای فیلد یا فیلدها به طور

قابل ملاحظه ای وجود نداشته باشد و نتوان مقدار مشخصی را

برای چندین سطر در نظر گرفت الگوریتم مذکور نمی تواند ب ه

طور موثر ارجاعات به تابع را کاهش دهد و به علت بررسی ساختار

توابع ، پارامترهای ارسالی به آنها ، همچنین پیمایش جداول

(فیلدهای مورد نظر) سربار کمی ایجاد می شود.

۴- آزمایشات و ارزیابی

در این مرحله ما روشمان را بر اساس الگوریتم توضیح داده شده

MicroSoft SQL در بخش قبل با روشهای پیشین در محیط

مقایسه و نتایجش را به ثبت می رسانیم. Server

mohsen_mahyar@yahoo.com

mo-mah.persianblog.ir

5

با (P تنظیمات: برای این منظور از یک کامپیوتر پنتیوم ( 4

پروسسور ۳ گیگاهرتز و حافظه ۷۶۸ مگابایت استفاده می کنیم.

مجموعه داده: به ساختار جدول زیر توجه فرمائید:

Number of

Tuples

Primary

Key

Name Fields

NodeId NodeId 100,000

ParentId

NodeName

TestTree

ParentId دارای شاخص کلاستر شده و فیلد NodeId فیلد

دارای شاخص کلاستر نشده است.

۱- تحلیل و آزمایشات -۴

پرس و جوی ۱: اولین آزمایش بر روی پرس و جوی زیر که فیلد

شامل ۹۹۹۹۴ مقدار ۵ است انجام گرفت و نتایج زیر ParentId

حاصل گردید:

-------------- Initial Query -------------

select dbo.fullname(parentid)

from testtree

where nodeid > 1

-------------------------------------------

بیشترین هزینه این پرس و جو صرف محاسبه تابع برای سطرهای

می شود ک ه خروجی یکسانی بر می گرداند (یعنی سطرهایی که

است) ParentId دارای مقدار ۵ برای فیلد

طبق الگوریتم ارائه شده این پرس و جو مراحل زیر را طی می

کند :

ابتدا محاسبه برای ۶ سطر اول

سپس نمایش سطر ششم برای بقیه سطرها (یعنی ۹۹۹۹۴ سطر )

طبق محدوده تعیین شده توسط الگوریتم .

به دلیل اینکه زمان محاسبه پرس و جو بسیار کاهش می یابد می

توان از زمان مصرفی برای داده های جدول و الگوریتم چشم

پوشی کرد.

--------------- Transformed Query --------------

--------Parametre (Constant Or Variable) -------

select parentid

from testtree

---- state 1

declare @a varchar(200)

select top 1 @a=dbo.fullname(parentid)

from testtree

where nodeid > 1

select top 2 @a from testtree

select top 3 @a=dbo.fullname(parentid)

from testtree

where nodeid > 1

select top 3 @a from testtree

select top 6 @a=dbo.fullname(parentid)

from testtree

where nodeid > 1

select top 99994 @a from testtree

------------------------------------------------------------

شکل ١: نتایج پرس و جوی ١

پرس و جو ی ۲: در این پرس و جو عدد ثابت به تابع ا رسال می

گردد:

-------------Initial Query-------------

select dbo.fullname(5)

from testtree

----------------------------------------

با توجه به الگوریتم فوق پرس و جو برای یک سطر محاسبه می

شود همانند زیر:

-------------- Transformed Query-------------

---------------- CONSTANT -----------------

---- state 1

declare @a varchar(200)

select top 1 @a=dbo.fullname(5)

from testtree

---- state 2

select @a from testtree

-----------------------------------------------

سپس برای مابقی سطرها (به اندازه سطرهای باقی مانده) به

نمایش در می آید.

10

2

0

2

4

6

8

10

12

SQL Server Optimizer Optimizing with REDUCER

Algorithm

Queries

Time(s)

SQL Server Optimizer

Optimizing with REDUCER

Algorithm

mohsen_mahyar@yahoo.com

mo-mah.persianblog.ir

6

شکل ٢: نتایج پرس و جوی ٢

پرس و جوی ۳: ساختار درختی هر نود را نمایش می دهد:

--------------Initial Query--------------

select dbo.fullname(nodeid)

from testtree

-----------------------------------------------

در حالیکه طبق الگوریتم فوق تابع فقط برای ۷ سطر اول نیاز به

بررسی است و برای مابقی سطرها نتیجه سطر ۷ به نمایش در می

آید.

------------------- Transformed Query --------------------

-- Input Variable Result Constant Or

Variable/Constant --

---- state 1

declare @a varchar(200)

select top 6 dbo.fullname(nodeid)

from testtree

select top 7 @a=dbo.fullname(nodeid)

from testtree

select top 99994 @a from testtree

----------------------------------------------------------------

البته تابع را به صورت زیر می توان تعریف کرد که در این حال

زمانی که پرس و جو بدون در نظر گرفتن الگوریتم صرف می کند

از ۱۶ ثانیه به ۵ ثانیه کاهش می یابد اما در هر صورت استفاده از

الگوریتم فوق زمان پرس و جو را به شکل قابل ملاحظه ای

کاهش می دهد.

CREATE FUNCTION dbo.fullname (@nodeid int)

RETURNS varchar(500) AS

BEGIN

if @nodeid <7 begin

declare @pid int

declare @Str varchar(500)

declare @CurrentName varchar(50)

SET @Str = ''

SELECT @Pid = ParentId , @CurrentName =

NodeName

FROM TestTree

WHERE NodeId = @nodeid

SET @Str = @CurrentName

WHILE (@PId <>0) BEGIN

SELECT @PId = ParentId,@CurrentName =

NodeName

FROM TestTree

WHERE NodeId = @PId

SET @Str = @CurrentName + ' -> ' +@Str

END

end

else begin

declare @str1 varchar(500)

SET @str مدیریت عامل -> معاونت مالی -> مدیریت '= 1

'اداری -> کارمند ساده

return @str1

end

RETURN @Str

END

شکل ۳: نتایج پرس و جوی ۳

به پرس و جوی فوق در صورتیکه مقدار تساوی برای فیلد

کم باشد توجه نمائید، در این پرس و جو تعداد ParentId

ParentId رکوردهای جدول به ۱۰ رکو رد کاهش می یابد و فیلد

۲ مقدار ۱ ، و ۱ مقدار ۰ ، ۳ مقدار ۲ ، فقط دارای ۴ مقدار ۵

است همانگونه که مشاهده می شود زمان مصرفی به علت سربار

ایجاد شده برای بررسی پرس و جو بیشتر از اجرای مستقل پرس

و جوست.

اما این نکته قابل توجه است که سربار حاصل بسیار جزئی است.

11

3

0

2

4

6

8

10

12

SQL Server Optimizer Optimizing with REDUCER

Algorithm

Queries

Time(s)

SQL Server Optimizer

Optimizing with REDUCER

Algorithm

5

16

2

0

2

4

6

8

10

12

14

16

18

SQL Server

Optimizer with

Improve of Function

SQL Server

Optimizer

Optimizing with

REDUCER

Algorithm

Queries

Time (s)

SQL Server Optimizer with

Improve of Function

SQL Server Optimizer

Optimizing with REDUCER

Algorithm

mohsen_mahyar@yahoo.com

mo-mah.persianblog.ir

7

شکل ۴: پرس و جوی ۳ با ساختار جدول متفاوت

۵- نتیجه گیری و پیشنهاد برای تحقیقات

آینده

ما در این تحقیق به بررسی تحقیقات پیشین در زمینه بهینه

سازی پرس و جوهای تودرتو پرداختیم و روشهای تعامل تودرتو با

استفاده از پارامتر سفارش ترتیبی، روش رابطه ای تودرتو (بر

و SQL اساس جبر رابطه ای تودرتو ) برای زیر پرس و جوهای

همچنین غیر تودرتو کردن پرس و جوهای تودرتویی که از

ترکیبات فصلی استفاده می کنند را مورد بحث قرار دادیم و ثابت

کردیم روشهای موجود برای بهینه سازی پرس و جوهایی که از

استفاده می کنند SELECT توابع تعریف شده کاربر در قسمت

به این دلیل که تابع برای هر سطر از پرس و جو بایستی به طور

مستقل اجرا گردد، مناسب نمی باشند، در نهایت الگوریتمی برای

حالات مختلفی از پرس و جوها که از توابع تعریف شده کاربر

استفاده می کنند ارائه کردیم . الگوریتم مذکور بسیاری از ارجاعات

به تابع را کاهش می دهد در نتیجه زمان اجرای پرس و جو به

طور قابل ملاحظه ای کاهش می یابد . به لحاظ اینکه از جمله

مشکلات مطرح شده، اجرای توابع به طور مستقل برای سطرهای

پرس و جو و همچنین هزینه توابع تعریف شده کاربر است، ما

پیشنهاد می کنیم برای حالات بیشتری این مسئله بررسی گردد

تا ارجاعات به تابع در شکلهای مختلف دیگری نیز کاهش یابد؛

خصوصا شرایطی که پارامتر تابع، متغیر و نتیجه ای که تابع بر

می گرداند نیز متغیر باشد . ما اعتقاد داریم بهینه سازی پرس و

جوهای تودرتو بالاخص پرس و جوهایی که از توابع تعریف شده

کاربر استفاده می کنند یکی از زمینه های مهم تحقیقاتی آینده

محسوب می شوند.

 

mohsen_mahyar@yahoo.com

mo-mah.persianblog.ir

8

   + MOHSEN GHASEMI - ۱:٠٠ ‎ق.ظ ; ۱۳۸٩/٦/۳۱