بخشی از مقاله
بهينه ساز پرسوجو چيست؟
بهينهساز پرسوجو از اهميت زيادي براي پايگاه داده ارتباطي برخوردار است، مخصوصا براي اجراي دستورات پيچيده SQL . يك بهينه ساز پرسوجو بهترين استراتژي بر اجراي هر پرسوجو را تعيين ميكند.
بهينهساز پرس و جو به عنوان مثال انتخاب ميكند آيا از شاخص براي يك پرسوجو مشخص استفاده كند يا نه، وكدام تكنيك الحاق هنگامي كه جداول با هم الحاق ميشوند استفاده شود.
اين تصميم تاثيري بسيار زيادي بر روي كارآيي SQL دارد، و بهينهسازي پرسوجو يك تكنولوژي كليدي بر هر كاربردي است، از سيستمهاي قابل استفاده (Operatianal system) تا انبارههاي دادهاي (Data warehause) و سيستمهاي تحليل (analysis systems) تا سيستمهاي مديريت محتويات (canternt – management) .
بهينهساز پرسوجو براي برنامههاي كاربردي و كاربران نهايي كاملا ناپيدا است . از آنجا كه برنامههاي كاربردي ممكن است هر SQL پيچيدهاي راتوليد كنند، بهينه سازها پرس و جو بايد فوقالعاده سطح بالا و قدرتمند باشد.
براي مطمئن شدن به ايجاد يك كارآيي خوب. براي مثال بهينه سازهاي دستورات SQL را تغيير شكل ميدهد، به دليل اين كه اين دستورات ميتوانند به معادلهايي تبديل شوند اما با كارآيي بالاتر.
بهينهسازهاي جستجو معمولا بر مبناي هزينه ميباشند. در يك استراتژي بهينه سازي بر مبناي هزينه، طرحهاي اجرايي چندگانهاي براي يك پرس و جو شخص توليد ميشود، و آنگاه يك هزينه تخميني براي هر طرح محاسبه ميشود. بهينه ساز پرسوجو طرحي كه داراي كمترين هزينة تخميني است را انتخاب ميكند.
بهينهسازي پرس وجو
• بهبود كارآيي پرس وجو به صورت خودكار
• بهبود به معني تضمين بهينه بودن نيست
مراحل فرآيند بهينه سازي
• انتخاب يك نمايش داخلي (internal representation)
• اعمال تغييرات لازم جهت بهبود كارآيي
• انتخاب رويههاي دسترسي سطح پايين به دادهها
• توليد طرحهاي اجرايي پرس وجو و تخصيص هزينه به آنها
• انتخاب يك طرح اجرايي با كمترين هزينه
درختهاي پرسوجو
نمايش درخت عبارت جبر رابطهاي با شرايط:
1. پيمايش ميانوندي درخت عبارت اصلي را توليد كند.
2. عملگرهاي دوتايي موجود – 0 U,X ميباشند.
3. عملگرهاي يكتايي موجود ميباشند.
4. همه برگها دردرخت رابطهاي پايه اي ميباشند.
مثال 1:
مثال 2 :
تبديلات (Tranformations)
طراحي دستكاريهاي جبري و معنايي جهت دوري از انجام اعمال هزينه بري باشد.
دستكاريهاي جبري
عبارت رابطهاي E3,E2,E1 را در نظر بگيريد.
قوانين تبديل زير براي حاصلضرب نمايش داده شدهاند اما ميتوان آنها را جهت انواع ديگري از عمليات الحاق به كار برد:
1ـ قانون جابهجايي
2ـ قانون شركتپذيري
3ـ آبشار تصاوير (Cascade of projection)
4- آبشار انتخابها (Cascade of selections)
5ـ تبديل عملگر انتخاب و عملگر تصوير (project)
اگر شرط F تنها با صفات ضرب درگير باشد آنگاه
6ـ تبديل عملگرهاي انتخاب به عملگر ضرب متقابل (Cross product)
اگر شرط F تنها با صفات E1 درگير باشد آنگاه
اگر F برابر باشد با حاصل البته به شرط اين كه F1 به E1 وابسته باشد و F2 به E2 واسته باشد آنگاه
7ـ تبديل عملگر انتخاب به عملگر اجتماع (Union)
8ـ تبديل عملگر انتخاب به عملگر تفاضل (Difference)
9ـ تبديل عملگر تصوير به عملگر ضرب متقابل
10ـ تبديل عملگر تصوير به عملگر اجتماع
نكته: عملگر تصوير و عملگر تفاضل داراي خاصيت جابه جايي نيستند.
الگوريتم بهينه سازي پرسوجو
• تجزيه كردن انتخابها به آبشار انتخابها
• انتقال هرانتخاب به پايين ترين سطح ممكن در درخت پرسوجو
• براي هر تصوير ـ آيا اين عملگر حذف شود يا اين كه اين عملگر به پايين ترين سطح ممكن در درخت انتقال يابد.
• تركيب آبشار انتخابها به يك انتخاب منفرد
• تركيب آبشار تصاوير به يك تصوير منفرد
• انتخاب رويههاي سطح پايين
• درخت پرسوجو تبديل شده يك سري از عمليات سطح پايين را نمايش ميدهد بهينهساز يك مجموعه زوال پيادهسازي سطح پايين از پيش تعريف شده بر هر عملگر دارد.
• بهينهساز از اطلاعات كاتالوگ سيستم (شاخصها، كارديناليتي و غيره) جهت تعيين هزينه هر روال كانديد استفاده ميكنند.
• اين فرآيند انتخاب مسير دسترسي ناميده ميشود.
• توليد طرحهاي پرس و جو و انتخاب يكي از آنها
• بهينه ساز يك مجموعه از طرحهاي پرس و جو را به وسيله تركيب روالهاي سطح پايين كانديد توليد ميكند.
• چندين تابع اكتشافي (Heurisic) جهت محدود كردن تعداد طرحهاي پرسوجوي توليد شده استفاده ميشود يك هزينه (از نظر ميزان I/O ديسك) به هر طرح اختصاص داده ميشود.
• كمهزينهترين طرح انتخاب ميشود.
(تخمين هزينه دقيق مشكل است زيرا بعضي از پرس و جوها به توليد نتايج مياني نياز دارند و اندازه اين نتايج وابستگي زيادي به مقادير دادهها واقعي دارد.)
روشهاي بهينهسازي پرسوجو
تبديل پرسوجو (Transformation Query)
هر گاه يك زبان دستكاري داده (DML) نظير SQL جهت ارايه يك پرسوجو به سيستم مديريت پايگاه داده رابطهاي (RDBMS) مورد استفاده قرار ميگيرد، گامهاي فرآيندي مستقلي جهت تبديل پرسوجو اصلي مورد نياز است.
هر يك از اين گامها بايد قبل از اين كه RDBMS پرسوجو را پردازش كند، انجام شود.
فرآيند تجزيه (The parsing process)
فرآيند تجزيه شامل دو عملكرد زير است:
1. كنترل كردن پرسوجو ورودي ازنظر نحوي (Syntax)
2. شكستن پرسوجو به قسمتهاي مولفهاي كه ميتواند به وسيله RDBMS ارزيابي شود.
قسمتهاي مولفهاي در يك ساختارداخلي ذخيره ميشوند اين ساختار ميتواند صورت گراف يا معمولا به صورت يك درخت پرسوجو باشد. يك درخت پرسوجو در حقيقت نمايش داخلي قسمتهاي مولفهاي يك پرسوجو باشد كه به راحتي مي تواند به وسيله RDBMS دستكاري شود. بعد ازتوليد اين درخت مرحله فرآيند تجزيه كامل ميشود.
فرآيند طبقهبندي (The standardization process)
برخلاف سيستمهاي سلسله مراتبي محض (Strictly hierarchical systerm) ، يكي از مزاياي بزرگ يك ROBMS توانايي پذيرفتن پرسوجو پوياي سطح بالا از كاربر است، در حالي كه كاربر هيچ دانشي از بستر ساختار دادهاي ندارد.
هدف فرآيند طبقهبندي تبديل پرسوجو به يك قالب مفيد براي بهينهسازي است. فرآيند طبقهبندي مجموعهاي از احكام (Rule) را براي دستكاري درخت پرسوجوي توليد شده به وسيله فرآيند تجزيه، به كارميبرد.
از آنجا كه اين احكام مستقل از مقادير دادهها ميباشند براي تماس اعمال ميتوانند مورد استفاده قرار گيرند. در مدت انجام اين فرآيند، RDBMS درخت پرسوجوي را باز چيني ميكند به شكلي كه طبقهبندي بيشتري شده باشد در بسياري از موارد، قسمتهاي نحوي اضافه به طور كامل حذف مي شود.
اين طبقهبندي درخت پرسوجوي، ساختاري را توليد ميكند كه ميتواند به وسيله بهينهساز پرسوجوي RDBMS مورد استفاده قرار گيرد.
بهينه ساز پرسوجو (The Query optimizer)
هدف بهينهساز پرسوجوي تويد يك طرح اجرايي كارآمد براي پردازش پرسوجوي ارائه شده به وسيله درخت پرسوجوي طبقهبندي شده است.
بنابراين يك بهينهساز ميتواند ازنظر تئوري يك طرح اجرايي بهينه را براي هر درخت پرسوجوي پيدا كند، يك بهينه ساز واقعا يك طرح اجرايي كارآمد ومورد قبول را توليد مي كند.
هنگامي كه يك پرسوجوي پيچده مي شود تعداد جداولي كه ممكن است لازم باشد الحاق شوند افزايش مييابد.
بدون استفاده از تكنيكهاي هرس كردن (pruning) يا روشهاي اكتشافي (heuristical) ديگر جهت كاهش تعداد تركيبات دادهايمورد نياز، زمان مورد نياز بهينهساز پرسوجو جهت ارائه يك طرح اجرايي كارآمد براي يك پرسوجوي پيچيده به راحتي ميتواند بيشتر از زمان مورد نياز يك طرح اجرايي با كارآمد كمتر شود.
بهينهسازي اكتشافي (Hevristic Optimization)
بهينهسازي اكتشافي يك روش قانونمند است كه ميتواند يك طرح اجرايي كارا براي اجراي پرسوجوي را تويد كند.
از آنجا كه خروجي مرحله طبقهبندي يك صورت يك درخت پرسوجو ارائه ميشود، هر نود از اين درخت به صورت مستقيم به يك عبارت جبري رابطهاي نگاشت ميشود.
عملكرد بهينهساز پرسوجوي اكشاني به اين صورت است كه قوانين جبري رابطهاي هم ارز با اين درخت عبارت را به كار ميبرد و اين عبارات را به نمايشي كاراتر تبديل مي كند.
با استفاده از قوانين هم اند جبر رابطهاي كه اطلاعات غير ضروري در هنگام تبديل اين درخت حذف ميشوند.
گامهاي اجرايي در بهينه سازي اكتشافي صورت زير ميباشند:
1ـ شكستن انتخابهاي ربطي (Canjuctive seleot) به انتخابهاي آبشاري (Cacadin select)
2ـ انتقال انتخابها به پايين درخت پرسوجوي جهت كاهش تعداد تاپلهاي (Tuple) خروجي پرسوجوي
3ـ انتقال Proyect به پايين درخت پرسوجوي جهت حذف صفات غير ضروري
4ـ تركيب عملگر ضرب كارتزين كه به دنبال يك عملگر انتخاب آمده است به يك عملگر الحاق ساده .
هنگامي كه اين گامها انجام شود، ميزان كارآيي يك پرسوجو ميتواند به وسيله باز چيني (rearranging) انتخابها (Select) و الحاقهاي (Join) باقيمانده افزايش پيدا كند.
به طوري كه كمترين سربار را به سيستم تحميل ميكنند بهينهساز اكشاني. بيش از جهت تجزيه پرسوجو كاري انجام نميدهد.
بهينهسازي نحوي (Syntactical optimizer)
بهينهسازي نحوه به درك كلمه بداند ساختار زيربنايي پايگاه داده و توزيع دادههاي ذخيره شده در جدول، تكيه دارد. همه جداول به ترتيبي كه كاربرد در پرسوجو مشخص كرده است الحاق ميشوند.
بهينهساز سعي در بهبود كارآيي اين الحاقها دارد به وسيله شاخصهايي (Index) كه براي بازيابي دادهها نيز هستند.
اين نوع از بهينهساز هنگام دستيابي به دادهها در يك محيط نسبتا ايستا ميتواند كارايي بسيار زيادي داشته باشد. بااستفاده از بهينهساز نحوي هنگامي رخ مي دهد كه ساختار زيربنايي داده به صورت خوبي پويا دادهها را تغيير مي دهند اغلب نياز پياده ميكنند كه مجدد كامپايل شوند تا كارايي دسترسي آنها به دادهها بيشتر شود. بهينهسازي بر مبناي ارزش (Cost – based optimizotion) جهت حل اين قبيل مسائل مطرح مي شود.
بهينهسازي بر مبناي هزينه (Cost – based optimization)
جهت اجراي بهينهسازي بر مبناي هزينه، بهينهساز اطلاعات مشخصي در مورد دادههاي ذخيره شده نياز دارد.
اين اطلاعات بسيار زياد به سيستم وابسته است و ميتواند شامل اطلاعاتي نظير اندازه فايل، نوع ساختار فايل ، شاخصهاي اوليه وثانويه (Primany and secondary Index) موجود، و صفات انتخابي (attribute selectivity) (درصد تابل هايي كه انتظار مي رود در يكانتخاب برابر بازيابي شوند).
از آنجا كه هدف هر مرحله بهينهسازي بازيابي اطلاعات درخواست شده به صورت كالا كارا است، يك بهينهساز بر مبناي ارزش از دانش خود در مورد دادههاي زيربنايي (underying data) و ساختار ذخيرهسازي؟
به وسيله ارزيابي ترتيبهاي گوناگون از عملگرهاي رابطهاي درخواست شده جهت توليد نتيجه، يك بهينهساز بر مبناي هزينه ميتواند يك طح اجرايي بر مناي يك تركيب از ترتيبات قابل استفاده وروش هاي دسترسي به دادهها ارائه دهد كه كمترين زمان ارزيابي شده را از نظر سرباري سيستم داشته باشد.
همان طور كه قبلا اشاره شد، هدف نهايي بهينه ساز بر مبناي هزينه تويد يك طرح اجرايي كارا جهت بازيابي دادهها نيست، اما توليد يك طرح اجرايي معتدل را ميتوان به عنوان هدف نهايي آن درنظر گرفت.
براي پرسوجو هاي پيچيده، هزينهاي كه محاسبه ميشود برمبناي ازيابي تمام زيرمجموعههاي ممكن و بر مبناي اطلاعات اماري كه گزينندگي (Selectivity) هر عملكرد رابطهاي را تخمين ميزنند، است.
به دليل اينكه نگهداري اين اطلاعات سبب به وجود آمدن سربار مي شود، اغلب سيستمهاي مديريت پايگاه داده ايناطلاعات را در جداول يا كاتالوگهاي سيستمي نگهداري مي كنند كه به صورت دستي مي توانند بروزرساني شوند.
مدير سيستم پايگاه داده بايد اين اطلاعات را نگهداري كند به دليل اين كه بهينهساز بر مبناي هزينه مي تواند به دين وسيله هزينه عملكردهاي مختلف را تخمين بزند.
بهينهساز معنايي (Semantic optimization)
اگر چه هنوز تكنيك بهينه سازي پيادهسازي شدهاي وجود ندارد اما تحقيقات قابل توجهي درمورد بهينهسازي معنايي در حال انجام است. عملكرد بهينهساز معنايي بر مبناي اين فرض است كه بهينهساز يك درك مقدماتي از شماي پايگاه داده واقعي دارد.
هنگامي يك پرسوجو ارائه مي شود، بهينهساز از دانش خود درمورد محدوديتهاي سيستمي جهت ساده كردن يا صرف نظر كردن از پرسوجو خاصي (البته اگر ضمانت شود كه يك مجموعه تهي را بر مي گرداند) استفاده ميكند.
بهينهساز پرسوجوي Microsoft SQL sevaer .
موتور پايگاه داده Microsoft SQL sevaer از بهينهساز پرسوجو بر مناي هزينه استفادهميكند جهت بهينهسازي پرسوجوهايي كه براي دستكاري دادهها با استفاده از SQL ارائه ميشوند.
(يك پرسوجوي دستكاري مي تواند هر پرسوجويي كه از كلمات كليدي Haoing, where پشتيباني ميكند. باشد؛ براي مثال (Update , Delete, select)
بهينه سازي در سه فاز زير انجام ميشود:
1. تحليل پرسوجو (Query Analysis)
2. انتخاب شاخص (Index Selection)
3. انتخاب الحاق (Join Selection)
تحليل پرسوجو (Query Andysis)
در فاز تحليل پرسوجو، بهينه ساز SQL sevaer هر عبارت ارائه شده را ه وسيله درخت پرسوجو بررسي ميكند و تشخيص مي دهد كه آيا مي توان آن را بهينه كرد يا نه.
SQL sevaer سعي ميكند عباراتي كه يك پويش (Scan) را محدود ميكند را بهينه كند؛ براي مثال ، عبارات الحاق و جستجو.اما،تمام عبارات صحيح در SQL قابل بهينهسازي نميباشند، نظير عبارتي كه شامل عملكرد رابطهاي < > (نامساوي) باشد.
هنگامي كه يك پرسوجوي رابطهاي شامل يك عبارتي است كه قابل بهينهسازي نميباشد، طرح اجرايي به اين قسمت از پرسوجو با استفاده از پويش جدول دسترسي پيدا مي كند.
اگر درخت پرسوجو شامل دستورات و عباراتي SQL باشد كه قابل بهينهسازي است، بهينهساز انتخاب شاخص را براي هر كدام از آن عبارات به كار ميبرد.
انتخاب شاخص (Index selection)
براي هر عبارت قابل بهينه سازي، بهينه ساز جداول سيستمي پايگاه داده را بررسي ميكند براي اين كه ببيند آيا يك شاخص مفيد براي دسترسي به دادهها وجود دارد ياخير.
يا شاخص زماني مفيد تلقي ميشود كه يك مجموعه پيشونيد از ستونها را شامل شود به طوري كه دقيقا باس تونهاي به كار رفته در پرس و جو دقيقا تطبيق پيدا كند. اين تطبيق بايد دقيقا وجود داشته باشد، زير يك شاخص بر مبناي ترتيب ستونها در زمان ايجاد جدول، ساخته ميشود.
براي يك شخاص كلاستر شده Clustered Index داده بر مبناي ترتيب ستونهاي يك شاخص ذخيره ميشوند.
تلاش جهت استفاده تنها يك ستون ثانويه از يك شاخص جهت دسترسي به دادهها شبيه تلاش جهت استفاده از يك دفترچه تلفن به صورت جستجو درتمام مداخل موجود با نام يكسان است. اگر يك شاخص مفيد براي هر عبارت وجود داشته باشد، بهينه ساز سپس جهت تشخيص عبارات گزينندگي تلاش مي كند.
درمبحث بهينهسازي بر مبناي هزينه، توضيح داده شده كه بهينهساز هزينه ارزيابي شده براي هر عبارات بر مبناي اطلاعات آ,اري محاسبه مي كند.
اين اطلاعات آماري براي ارزيابي عبارت گزينندگي Clauses selectivity) ) استفاده ميشودند (درصد تاپلهايي كه براي هر عبارت برگردانده ميشود) Microsoft SQL server اين اطلاعات آماري تنها در زمانهاي زير بروز رساني مي شوند:
در خلال ساخت ابتدايي شاخص (اگر داده در جدول وجود داشته باشد)
هنگامي كه دستور UPDATE SRATIICS براي شاخص با جداول مرتبط شده اجرا ميشود.
جهت آمادهسازي SQL sever با اطلاعات آماري دقيق كه بازتاب ميزان توزيع دقيق تاپلها در يك جدول داراي داده است، مدير سيستم پايگاه داده بايد اطلاعات آماري را براي شاخصهاي جداول نگهداري كند.
اگر هيچ اطلاعات آماري براي شاخصها موجود نباشد، يك اكتشاف بر مبناي عملگر رابطهاي استفاده ميشود براي توليد يك ارزيابي از گزينندگي .
اطلاعات در مورد گزينندگي عبارت ونوع شاخص موجود جهت محاسبه هزينه عبارت استفاده ميشود.
SQL servaer ميزان رخ دادن I/O ديسك را تخمين ميزند، اگر شاخص براي بازيابي داده از جدول استفاده شود.
اگر اين تخمين كمتر از هزينه I/O ديسك در حالت پويش تمام جدول باشد، طرح دسترسي كه از اين شاخص استفاده مي كند ايجاد مي شود.
انتخاب الحاق (Join selection)
هنگامي كه انتخاب شاخص كامل مي شود و همه عبارات داراي هزينة پردازش بر مبناي طرح دسترسي ميباشند، بهينه ساز انتخاب الحاق را اجرا ميكند.
انتخاب الحاق جهت يافتن يك ترتيب كارا براي تركيب طرحهاي دسترسي استفاده ميشود.
براي اجراي اين مورد. بهينه ساز ترتيبهاي مختلف عبارات را با هم مقايسه ميكند و سپس طرح الحاق را انتخاب ميكند با توجه به اين كه كمترين هزينه پردازشي I/O ديسك را داشته باشد.
از آنجا كه تعداد تركيبات ممكن از عبارات مي تواند مانند پيچيدگي يك پرسوجوافزايش پيدا كند، بهينه ساز پرسوجو در SQL servar از تكنيكهاي هرس كردن درخت جهت كمينه كردن (minimize) سرباراين مقايسهها استفاده ميكند. هنگامي كه فاز انتخاب الحاق كامل مي شود، بهينه ساز پرسوجو در SQL Server يك طرح اجرايي پرسوجو بر مبناي هزينه تهيه ميكند كه از سودمندهاي شاخصهاي موجود استفاده ميكند هنگامي كه آنها براي دسترسي به دادهها مفيد هستند و اين كار به اين دليل انجام ميشود كه سربار سيستم كمينه شود و كارايي بهبود يابد
تشريح روش كار بهينه ساز پرسوجو Microsoft SQL Server
Microsoft SQL Server داراي يك بهينهساز پرسوجوبرمبناي هزينه است كه يك پرسوجودريافت كرده و به سرعت بهترين روشرا جهت بازيابي دادهها مشخص ميكند، اين روش دستيابي ميتواند شامل ترتيب الحاق جداول يا استفاده از شاخص هاي گذاشته شده بر روي اين جداول باشد.
با استفاده از يك بهينه ساز پرس و جو بر مباي هزينهها مدير سيستم يا كاربر نهاييي از بدست آوردن موثرترين راه كارها در ساختار دهي پرسوجوها جهت بدست آوردن كارايي بهيه ازاد مي شوند اما در عوض بهينهساز بايد تمام ترتيبهاي ممكن در الحاق جداول و هزينه استفاده از شاخصهاي موجود بر روي جدول را بدست آورد و در نهايت طرحي را كه كمترين هزينه را از لحاظ I/O صفحات دارد راانتخاب كند.
جزئيات اطلاعاتي در مورد روش دسترسي نهايي كه بهينه ساز انتخاب كرده است را ميتوان با اجراي يك دستور Trans act – SQL با عنوان "set show plan on' مشاهده نمود.
اين دستور درهر مرحه نشان مي دهد كه بهينهساز از كدام ترتيب الحاق جداول و يا كدام شاخص را كه داراي كمترين هزينه جهت بازيابي دادهها استفاده مي كند. اين نمايش مراحل فوقالعاده مفيد است مخصوصا هنگامي كه ميخواهيم ببينيم آيا شاخص هاي تعريف شده بر روي جداول آن قدر سفيد هستند كه توسط بهينهساز مورد استفاده قرار گيرند.
در اين مقاله سعي شده است خروجيهاي Shawplop براي يك پرس وجوي خاص توضيح داده شود.
“STEP n”
اين دستور در خروجي Showplan قرارميگيرد براي هر پرسوجودر حقيقت n يك عدد صحيح است كه ميتواند به صورت SREP 1 شروع شود. براي بعضي از پرسوجو ها، SQL Server نمي تواند نتايج را به صورت مؤثر در يك مرحله بازيابي كند، و بايد پرسوجورا به چندين گام بشكند.
براي مثال، اگر يك پرسوجوشامل عبارت Group By ، پرسوجوبايد در دو كام شكسته شود: يك گام براي انتخاب سطرهاي محدود شده از جدول، و گام بعدي براي گروهبندي آنها بايد انجام شود. پرسوجوزير يك پرسوجوي تك ـ گام را نشان ميدهد.
Query:
SELECT au_lname, au_fname
FROM Authors
WHERE city = "Oakland"
SHOWPLAN: STEP 1
The type of query is SELECT
FROM TABLE
Authors
Nested iteration
Table Scan
نوع پرسوجوانتخاب است(در يك جدول موقت)
“The type of query is SELECT”
دستور Shawplan نشان ميدهد كه SQL Server نياز دارد بعضي ازنتايج پرسوجورا بلافاصله در يك جدول موقت (warktable) درج كند، تا بعد از پردازش پرسوجومقادير را از اين جدول موقت انتخاب كند.
اين موردبيشتر در پرسوجوكه با عبارت Group by درگير ميشوند اتفاق ميافتد، به طوري كه اولين نتيجه خروجي در يك جدول موقت قرار ميگيرند، و سپس سطرهاي قرار گرفته بر مبناي ستون مشخص شده در عبارت Group by گروهبندي مي شوند. پرسوجوي زير فهرستي از تمام شهرها و تعداد نويسندگاني كه در هر شهرزندگي ميكنند نشان ميدهد.
طرح پرسوجوبه دوگام شكسته مي شود:
اولين گام سطرها را از يك جدولموقت انتخاب مي كند و دومين گام سطرهاي گروه بندي شده را از جدول موقت بازيابي ميكند:
Query:
SELECT city, total_authors = count(*)
FROM Authors
GROUP BY city
SHOWPLAN: STEP 1
The type of query is SELECT (into a worktable)
GROUP BY
Vector Aggregate
FROM TABLE
Authors
Nested iteration
Table Scan
TO TABLE
Worktable
STEP 2
The type of query is SELECT
FROM TABLE
Worktable
Nested iteration
Table Scan
نوع پرسوجو<query type> است
اين عبارت نوع پرس و جو را در هر مرحله نشان ميدهد. براي اغلب پرسوجوهاي كاربر، نوع <query type> INSERT,UPDATE,SELECT و يا DELETE است. مثالهاي زير خروجي هاي مختلف را براي پرسوجوها و دستورات گوناگون نشان ميدهد:
Query 1:
CREATE TABLE Mytab (col1 int)
SHOWPLAN 1: STEP 1
The type of query is TABCREATE
Query 2: INSERT Publishers
VALUES ("9904", "NewPubs", "Seattle", "WA")
SHOWPLAN 2: STEP 1
The type of query is INSERT
The update mode is direct
Table Scan
TO TABLE
Publishers
حالت بروز رساني به تعويق افتاده ميشود
“The update mode is deferred”
دو روش يا دو حالت (mode) وجود دارد كه SQL Server ميتواند عمليات بروزرساني نظير SELECT INTO, UPDATE,INSERT,DELETE را اجرا كند. اين دو روش عبارتند از : بروزرساني به تعويق افتاده (deferred update) و بروزرساني مستقيم (direct update) .
هنگامي كه روش بروزرساني به تعويق افتاده استفاده مي شود، تغييرات براي تمامي سطرها انجام ميشود به وسيله ايجاد ركوردهاي log در log تراكنش (Tranaction log) منعكس كردن مقدار قديم و جديد ستون هايي كه بايد تغيير داده شود (در مورد عمليات UPDATE) يا مقاديري كه بايد درج و يا حذف شوند به درترتيب در مورد دستور DELETE,INSERT) .
هنگامي كه همة ركوردهاي log ساخته ميشوند، آنگاه تغييرات در صفحات دادهاي انجام خواهد شد. اين روش ركوردهاي log بيشتري نست به روش مستقيم (كه در ادامه بررسي مي شود) ايجاد ميكند، اما در اجراي دستوراتي كه جدول را به صورت آبشاري (cascade) تغيير ميدهند سودمندي بيشتري دارد.
براي مثال، جدول را با يك ستون col 1 و يك شاخص يكتا برروي آن در نظر بگيريد، و مقاديري بين 1 تا 100 كه در ستون col 1 قرار گرفته است . حال فرض كنيد دستور UPDATE براي افزايش مقدار هر سطر به اندازه يك واحد اجرا ميشود:
Query 1:
UPDATE Mytable
SET col1 = col1 + 1
SHOWPLAN 1: STEP 1
The type of query is UPDATE
The update mode is deferred
FROM TABLE
Mytable
Nested iteration
Table Scan
TO TABLE
Mytable
فرض كنيد كه قرار باشد از سطر اول تا سطر آخر تمام جدول بروزرساني شود. بروزرساني اولي سطر (كه داراي مقدار 1 است) به مقدار 2 با خطا مواجه خواهد شد. چون با اين كار شاخص يكتاي تعريف شده بر روي جدول نقض ميشود به دليل اين كه مقدار 2 در جدول وجود دارد، همچنين بروزرساني مقدار 2 به مقدار 3 نيز با خطا مواجه خواهد شد و به همين ترتيب بروزرساني بقيه سطرها نيز با خطا مواجه ميشوند به جز آخرين سطر.