در این فصل ما به تکنیکهای بکار رفته توسط DMBS برای پردازش، بهینهسازی و اجرای پرس و جوهای سطح بالا میپردازیم.
پرس و جوی بیان شده در زبان پرسو جوی سطح بالا مثل SQL ابتدا باید پویش و تجزیه . معتبر شود. پویشگر (اسکنر) علامت هر زبان، مثل لغات کلیدی SQL، اساس ویژگی، و اساس رابطه، را در متن پرس و جو شناسایی میکند، در عوض تجربه کننده، ساختار دستوری پرس و جو را برای تعیین اینکه آیا بر طبق قوانین دستوری زبان پرس و جو تدوین میشود یا خیر، چک میکند. پرس و جو باید همچنین معتبر شود، با چک کردن اینکه تمام اسامی رابطه و ویژگی معتبر هستند و اسامی معنیدار در طرح پایگاه اطلاعاتی ویژهای پرس و جو میشوند. نمونه داخلی پرس و جو ایجاد میشود، که تحت عنوان ساختار دادههای درختی بنام درخت پرس و جو میباشد. ارائه پرس و جو با استفاده از ساختار دادههای گراف بنام گراف پرس و جو نیز امکان پذیر است. DOMS باید استراتژی اجرایی برای بازیابی نتیجه پرس و جو از فایلهای پایگاه اطلاعاتی را هدایت کند. پرس و جو استراتژیهای اجرایی بسیاری دارد. و مرحله انتخاب، مورد مناسبی برای پردازش پرس وجو تحت عنوان بهینهسازی پرس و جو شناخته شده است.
تصویر ۱، مراحل مختلف پردازش پرس و جوی سطح بالا را نشان میدهد. قطعه بر نامه بهینهساز پرس وجو، وظیفه ایجاد طرح اجرایی را بعهده دارد و ژنراتور (تولید کننده) که ، کد را برای اجرای آن طرح ایجاد میکند. پردازنده پایگاه اطلاعاتی زمان اجرا وظیفه اجرای که پرس و جو را بعهده دارد، خواه در وضعیت کامپایل شده یا تفسیر شده جهت ایجاد نتیجه پرس و جو. اگر خطای زمان اجرا نتیجه شود، پیام خطا توسط پایگاه اطلاعاتی زمان اجرا ایجاد میشود.
اصطلاح بهینهسازی نام بی مسمایی است چون در بعضی موارد، طرح اجرایی انتخاب شده، استراتژی بهینه نمیباشد، آن فقط استراتژی کارآمد معقول برای اجرای پرس و جو است. یافتن استراتژی بهینه، ضامن صرف زمان زیادی است، بجز برای سادهترین پرس و جوها، ممکن است به اطلاعاتی روی چگونگی اجرای فایلها در فهرستهای فایلها، اطلاعاتی که ممکن است کاملاً در کاتالوگ DBMS در دسترس نباشد، نیاز باشد. از اینرو، برنامهریزی استراتژی اجرا ممکن است توصیف درستتری نسبت به بهینهسازی پرس و جو باشد.
برای زبانهای پایگاه اطلاعاتی (دریایی) جهتیابی در سطح پایینتر در سیستمهای قانونی، مثل شبکه DML شبکهای یا MOML سلسله مراتبی، برنامه نویس باید، استراتی اجرای پذیرش و جو را انتخاب کند ضمن اینکه برنامه پایگاه اطلاعاتی را مینویسد. اگر DBMS فقط زیان جهتیابی را ارائه دهد. فرصت و نیاز محدودی برای بهینهسازی پرس وجوی وسیع توسط DBMS وجود دارد، در عوض به برنامه نویس قابلیت انتخاب استراتژی اجرایی بهینه ارائه میشود. بعبارت دیگر، زبان پرس و جو در سطح بالا، مثل SQL برای DBMSهای رابطهای یا OQL برای DBMSهای مقصد، در ماهیت تفریطیتر است. چون آنچه نتایج مورد نظر پرس و جو است بغیر از شناسایی جزئیات چگونگی بدست آمدن نتیجه، را تعیین میکند. بهینهسازی پرس و جو برای پرس و جوهایی ضروی است که در زبان پرس و جوی سطح بالا تعیین می شوند. ما روی توصیف بهینهسازی پرس و جو در زمینه ROBMS تمرکز میکنیم چون بسیاری از تکنیکهایی که توصیف می کنیم برای، برای ODBMSها تطبیق یافتهاند. DBMS رابطهای باید استراتژیهای اجرای پرس و جوی دیگری را ارزیابی کند و استراتژی بهینه یا کارآمد معقولی را انتخاب کند. هر DBMS ، تعدادی الگاریتم دسترسی به پایگاه اطلاعاتی کلی دارد که علامتهای رابطهای مثل SELECT یا JOIN یا ترکیبی از این عملیات ها را اجرا میکند. تنها استراتژیهای اجرایی که میتوانند توسط الگاریتمهای دسترسی DBMS اجرا شوند و برای طراحی پایگاه اطلاعاتی فیزیکی ویژه و پرس و جوی خاص بکار روند، میتوانند توسط قطعه برنامه بهینهسازی پرس و جو در نظر گرفته شوند.
ما با بحث کلی چگونگی ترجمه پرس و جوهای SQL به پرس و جوهای جبری رابطهای و در بهینهشدن آنها کار را شروع میکنیم. بعد ما روی الگاریتمها برای اجرای عملیاتهای رابطهای در بخش ۱۸۰۲ بحث میکنیم. بدنبال این مطلب، بررسی از استراتژیهای بهینهسازی پرس و جو را ارائه میدهیم. دو تکنیک اصلی برای اجرای بهینهسازی پرس و جو وجود دارد. اولین تکنیک بر اساس قوانین ذهنی جهت ترتیب دادن عملیاتها در استراتژی اجرای پرس و جو میباشد. ذهن قانونی است که بخوبی در اکثر موارد عمل میکند ولی برای کار مناسب در هر مورد کنش تضمین نمیشود. قوانین عملیاتها را در درخت پرس وجو مجدداً ترتیب میدهند. دومین تکنیک شامل برآورد هزینه استراتژیهای اجرای متفاوت و انتخاب طرح اجرایی با پایینترین هزینه برآورد است. دو تکنیک معمولاً در بهینه ساز پرس و جو (باهم ترکیب میشوند) بهم ملحق میگردند. بررسی مختصری از عوامل در نظر گرفته شده در طول بهینهسازی پرس و جو در RDBMS بازرگانی ORACLL= را ارائه میدهیم. در بخش بعدی نوعی بهینهسازی پرس و جوی معنایی را ارائه میدهد که در آن محدودیتهای شناخته شده برای پرداختن به استراتژیهای اجرایی پرس و جوی کارآمد استفاده میشوند.
۲ – ترجمه پرس و جوهای SQL به پرس و جوهای رابطهای:
در عمل، SQL زبان پرس وجویی است که در اکثر RDBMS های بازرگانی استفاده میشود. پرس وجوی SQL ، ابتدا به عبارت جبری رابطهای توسعه یافته معادل، نمایانگر ساختار داروهای درخت پرس و جو، ترجمه میشود و بعد بهینهسازی میشود. پرس و جوهای SQL به بلوکهای پرس و جو تجزیه میشوند، که واحدهای اساسی را تشکیل میدهند که میتوانند به عملکردهای جبری ترجمه شوند و بهینهسازی شوند. بلوک پرس و جو شامل عبارت SELECT- FROM-WHERE تکی و بندهای Groop By و HAVING است چنانچه اینها بخشی از بلوک باشند. از اینرو، پرس و جوهای تو در تو در پرس و جو بعنوان بلوکهای پرس و جوی مجزا شناسایی میشوند. چون SQL شامل عملکردهای گروهی، مثل MAX ، COUNT,SUM میباشد، این عملگرها باید در پرس و جوی جبری توسعه یافتهای شامل شوند، همانطوریکه در بخش ۷۰۵ توصیف شد. پرس و جوی SQL در رابطه EMPLOEE در تصویر ۷۰۵ را در نظر بگیرید:
این پرس و جو شامل، پرس و جوی فرعی تو در تو است و از اینرو به دو بلوک تجزیه میشود. بلوک درونی بدین صورت است:
و بلوک بیرونی بدین صورت می باشد:
که C نمایانگر نتیجه حاصله از بلوک درونی است. بلوک درونی به عبارت جبری رابطهای توسعه یافته زیر ترجمه شده است:
و بلوک بیرونی به عبارت زیر ترجمه شده است:
بهینهساز پرس و جو، طرح اجرایی را برای هر بلوک انتخاب میکند. ما باید اشاره کنیم به در مثال فوق، بلوک درونی نیاز به ارزیابی شدن دارد تنها زمانی که، حداکثرحقوقی که بعکار میرود که بعنوان ثابت C، توسط بلوک بیرونی استفاده میشود. ما اینرو پرس و جوی تودرتوی غیرمرتبط نامیدیم (در فصل ۸). آن برای بهینهسازی پرس و جوهای تو در توی مرتبط پیچیدهتر، خیلی سختتر است، جایی که متغیر Tuple از بلوک بیرونی در بند WHERE در بلوک درونی ظاهر میشود.
۱۸۰۲- الگاریتم های انسانی برای اجرای عملیاتهای پرس و جو:
RDBMS شامل الگاریتمهایی برای اجرای انواع مختلف عملیاتهای رابطهای است که میتوانند در استراتژی اجرای پرس و جو نمایان شوند، این عملیاتها شامل عملیاتهای جبری بیسیک (اصلی) و توسعه یافته مورد بحث در فصل ۷ ، و در بسیاری موارد، الحاقاتی از این عملیاتها میباشد. برای هر یک از این عملیات ها یا الحاقی از عملیاتها، یک یا چند الگاریتم برای اجرای عملیاتها در دسترس قرار دارند. الگاریتم ممکن است فقط برای ساختارهای ذخیره خاص مسیرهای دستیابی بکار روند، در اینصورت ، تنها در صورتی استفاده میشود که فایل های موجود در عملیات شامل این مسیرهای دستیابی هستند. در این بخش، ما به الگاریتمهای نمونه بکار رفته برای اجرای SEKECT ، JOIN و دیگر عملیاتهای رابطهای میپردازیم. ما بحث مرتب کردن خارجی را در بخش ۱۸۰۲۰۱ آغاز میکنیم که در قلب عملیاتهای رابطهای قرار دارد که از استراتژیهای ادغام کردن به مرتب کردن استفاده میکند. بعد ما به الگاریتمهایی برای اجرای عملیات SELECT در بخش ۱۸۰۲۰۲ میپردازیم، به عملیات JOIN در بخش ۱۸۰۲۰۳ و عملیات PRIJECT و عملیاتهای مجموعه در بخش IE 1802 و عملیاتهای گروهی و جمعی در بخش ۲ .۲ . ۱۸ میپردازیم.
۱٫ ۲٫ ۱۸- مرتب کردن خارجی:
مرتب کردن، یکی از الگاریتمهای اولیه بکار رفته در پردازش پرس و جو است. برای مثال، به هر وقت پرس و جوی SQL ، بعد ORDER BY را تعیین میکند، نتیجه پرس و جو باید مرتب گردد. مرتب کردن، مؤلفه کلیدی در الگاریتمهای مرتب کردن- ادغام کردن (مرتب-ادغام) بکار رفته برای Join و عملیاتهای دیگر، دور الگاریتمهای حذف کپی برای عملیات PROYECT است. ما روی بعضی از این الگاریتمها در بخش ۳٫ ۲٫ ۱۸ و ۴٫ ۰۲ ۱۸ بحث خواهیم کرد. توجه کنید که مرتب کردن در صورتی که اجتناب میشود که شاخص مناسب برای امکان دسترسی مرتب شده به ثبتها وجود دارد.
مرتب کردن خارجی به الگاریتمهای مرتب کردن اشاره میکند که برای فایل های بزرگ ثبت های ذخیره شده روی دیسک مناسب هستند که در حافظه اصلی، مثل اکثر فایل های پایگاه اطلاعاتی تناسب نمییابد. الگاریتم مرتب کردن خارجی نمونه از استراتژی مرتب- ادغام استفاده میکند، که با مرتب کردن- فایلهای فرعی کوچک بنام اجراها در فایل اصلی شروع میشود و بعد اجراها مرتب شده ادغام میشوند، فایلهای فرعی مرتب شده بزرگتری ایجاد میشوند که بترتیب ادغام میشوند. الگاریتم ادغام –مرتب، مثل دیگر الگاریتم های پایگاه اطلاعاتی به فاضی بافر در حافظه اصلی نیاز دارد، جایی که مرتب کردن واقعی و ادغام اجراها انجام می شود. الگاریتم اصلی (سیبک) شرح داده شده در تصویر ۱۸۰۲ ، شامل دو مرحله است: (۱) فاز یا مرحله مرتب کردن و (۲) مرحله ادغام.
در مرحله مرتب کردن، اجراهای فایلی که میتواند در فضای باز موجود تناسب یابد در حافظه اصلی خوانده میشوند و با استفاده از الگاریتم مرتب کردن داخلی مرتب میشود عقب دیسک بعنوان فایلهای فرعی مرتب شده متوفی نوشته میشود. اندازه اجرا و تعداد اجراهای آغازین توسط تعداد بلوکهای فایل (b) و فضای بافر موجود (NB) بیان میشود. برای مثال اگر بلوکو اندازه قایل ۱۰۲۴=b بلوک باشد، بعد یا ۲۰۵ اجرای آغازین در هر اندازه ۵ بلوک است. از اینرو، بعد از مرحله مرتب کردن، ۲۰۵ اجرای مرتب شده بعنوان فایلهای فرعی موقتی روی دیسک ذخیره میشوند. اجرای مرتب شده بعنوان فایلهای فرعی موقتی و روی دیسک ذخیره میشوند.
در مرحله ادغام شدن، اجراهای مرتب شده، در طول یک یا چند گذر ادغام میشوند. درجه ادغام شدن تعداد اجراهایی است که میتوانند با همدیگر در هر گذر ادغام شوند. در هر گذر، یک بلوک بافر، برای حفظ یک بلوک از هر اجرای ادغام شده نیاز میباشد، و یک بلوک برای تشکیل یک بلوک نتیجه ادغام لازم است . از اینرو، کوچکتر از و است و تعداد گذرها، است. در مثالها، است. لذا، ۲۰۵ اجرای مرتب شده آغازین در ۲۵ تا در پایان اولیه گذر ادغام میشود: که بعد به ۱۲، بعد ۴ بعد یک اجرا ادغام میشوند، که بدین معنی است که چهارگذر لازم میباشد. حداقل از ۲، عملکرد بدترین مورد الگاریتم را ارائه میدهد که بدین قرار است:
اولین جمله، تعداد دسترسیهای بلوک برای مرحله مرتب سازی را نشان میدهد، چون هر بلوک فایل دو برابر دسترسی میشود، یکبار برای خواندن در حافظه، یکبار برای نوشتن ثبتها دیسک بعد از مرتب کردن. دومین جمله، تعداد دسترسیهای بلوک برای مرحله ادغام کردن را نشان میدهد، با فرض اینکه بدترین مورد از ۲ وجود دارد. بطور کلی، ثبت وقایع در مبنای و عبارت برای تعداد دسترسیهای بلوک نوین قرار میشود:
تصویر ۱۸۰۲- شرح الگاریتم ادغام – مرتب کردن برای مرتب کردن خارجی:
مقدمه ۲
۲ – ترجمه پرس و جوهای SQL به پرس و جوهای رابطهای: ۵
۱۸۰۲- الگاریتم های انسانی برای اجرای عملیاتهای پرس و جو: ۶
۱٫ ۲٫ ۱۸- مرتب کردن خارجی: ۷
۲٫ ۲٫ ۱۸- اجرا و پیادهسازی عملیات SELECT : 9
متدهای جستجو برای انتخاب ساده: ۱۰
متدهای جستجو برای انتخاب پیچیده: ۱۱
متدهای برای اجرای اتصال ها: ۱۵
اجرای اتصال بیرونی: ۲۹
تبدیل درختان پرس و جو به طرح های اجرای پرس و جو: ۴۴
شامل 66 صفحه فایل word