مفهوم Cardinality Estimator در SQL Server 2014

مفهوم Cardinality Estimator در SQL Server 2014

نوشته شده توسط: سحر بیرامی
تاریخ انتشار: ۱۵ آذر ۱۳۹۴
آخرین بروزرسانی: 28 بهمن 1403
زمان مطالعه: 4 دقیقه
۱
(۱)

مفهوم Cardinality Estimator در SQL Server، ابتدا یک جدول ایجاد کرده و هزار رکورد در آن درج می کنیم و یک کوئری با شرط Where بر روی جدول اجرا می کنیم. SQL به صورت خودکار یک Statistic Column بواسطه شرطی که در کوئری گذاشتم ایجاد میکند . حال مسئله این است که اگر ما هر کوئری برای به دست آوردن زیر مجموعه ای از هزار رکورد اجرا کنیم ، Optimizer تعداد رکوردهای تخمینی را از روی Column Statistic به دست می آورد ( منظور همان Column Statistic ساخته شده هنگام اجرای اولین کوئری است ). 

مفهوم Cardinality Estimator در SQL Server چیست؟ 

اگر ۵۰۰ رکورد دیگر به جدول اضافه کنیم ، statistic به علت محدودیت آستانه خود ، به طور خودکار بروز نمی شود( در واقع SQL تا زمانی که به حداکثر ظرفیت آستانه آمار و یا همان Statistic نرسیده باشد ، آن را بروز میکند) و اگر ما کوئری برای واکشی رکوردهای جدیدا اضافه شده اجرا کنیم ، با برآوردگر کاردینالیتی قدیم (قبل از ۲۰۱۴) تعداد رکوردهای تخمینی ۱ است ، چون که هیچ Statistic برای رکوردهای جدیدی که اضافه کردیم ، ساخته نشده است ولی اگر ما کوئری را با استفاده از کاردینالیتی جدید اجرا کنیم تعداد رکوردهای تخمینی نسبت به کاردینالیتی قدیم ، خیلی نزدیک به تعداد واقعی است. همجنین شما می‌توانید کوئری نویسی را به صورت گام‌به‌گام از نیک آموز فرا بگیرید.

این مسئله در واقع یک پیشرفت خوب محسوب میشود . (در افزایش سرعت کوئری ها تاثیر خوبی دارد ). مثال مطرح شده را قدم به قدم بررسی می کنیم : ابتدا یک جدول ایجاد کرده و هزار رکورد در آن درج می نمائیم و سپس یک کوئری برای به دست آوردن شناسه های کوچکتر از ۸۰۰ اجرا میکنیم ، خواهیم دید که یک Statistic ایجاد میشود. حالا کوئری زیر را برای مشاهده نام statistics ایجاد شده بر روی ستون id اجرا می کنیم . این نام ممکن است در سیستم های مختلف متفاوت باشد. نام statistics را در کوئری زیر جایگزین و کوئری را اجرا میکنیم ( همانطور که در تصویر مشخص شده است تعداد رکوردها را ۱۰۰۰ نمایش میدهد) حالا کوئری برای درج ۵۰۰ رکورد دیگر اجرا می کنیم. 

اگر بعد از درج ۵۰۰ رکورد ، هدر مربوط به Statistics را مجددا بررسی کنیم می بینیم که تعداد کل رکوردها همان مقدار قبلی است (هزار رکورد ) . علت این امر همان محدودیت آستانه Statistic است .کوئری برای به دست اوردن رکوردهایی که جدیدی که اضافه کردیم همراه با Actual Execution Plan اجرا می کنیم . مورد جالبی که مشاهده میشود این است که Statistic چیزی راجع به رکوردهای جدبد اضافه شده نمیداند و تعداد رکوردهای تخمینی را یک بر میگداند. افراد علاقه‌مند می‌توانند با مطالعه مقاله پرکاربردترین دستورات SQL Server، دانش خود را در زمینه کوئری‌نویسی گسترش دهند.

سخن پایانی

مفهوم Cardinality Estimator در پایگاه داده SQL Server، تعداد رکوردهای تخمینی یک برگردانده میشود و این مسئله خوبی برای Performance محسوب نمیشود. حالا مشابه این کوئری را در CE جدید (در SQL 2014) بررسی می کنیم. مشاهده می کنید که تعداد رکوردهای تخمینی ۳۰۰ برگردانده شده و این به عدد واقعی نزدیکتر است. ما در نیک آموز منتظر نظرات ارزشمند شما درباره این مقاله هستیم.


مشاهده کامل‌ترین و بروزترین آموزش sql server در نیک آموز


چه رتبه ای می‌دهید؟

میانگین ۱ / ۵. از مجموع ۱

اولین نفر باش

جشواره عیدانه نیک آموز
title sign
معرفی نویسنده
سحر بیرامی
مقالات
1 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
سحر بیرامی
title sign
معرفی محصول
title sign
دیدگاه کاربران

    •    با سلام
      سایت بسیار خوبی  دارید

    •     بسیار مناسب و کاربردی و در عین حال روان و خوب توضیح داده شده بود

      با تشکر 
    • سلام

      تشکر از بابت ارائه این مقاله تون.
      بسیار جمع و جور و خلاصه و مفید بود… عالی..
      موفق باشید.
    •   جناب استاد طاهری
      سلام
      از راهنمایی ارزشمند حضرتعالی متشکرم

    •     سلام خانم بیرامی

      متشکرم از ارائه مقاله خوبتان در سایت 
      منتظر مقاله های بیشتر شما در نیک آموز هستیم
      موفق باشید
    •   سلام
      ضمن تشکر از مقاله خوبتون خانم بیرامی
      در کل مقاله حضرتعالی مقاله خوبی بود و نقطه قوت مقاله در کاربردی بودن مقاله هست ولی کاش قبل رفتن به سر مثال مقداری مقدمه و پیشگفتار داشت تا با یک زمینه فکری  خواننده مقاله به مثال و اصل موضوع ورود میکردد ودرک مقاله ملموس تر میشد…
      متشکرم

    •     مجتبی جان سلام

      درباره Cardinality Estimation در SQL Server در سایت چندین مقاله مفید ارائه شده است . دوستان عزیز برای کسب اطلاعات بیشتر در این خصوص به لینک های زیر مراجعه کنند.
close-image

دانلود رایگان: آموزش SQL Server

هر روز یک ویدئو آموزشی رایگان برای شما ایمیل خواهد شد!

پاپ آپ | SQL Server

  • این قسمت برای اهداف اعتبارسنجی است و باید بدون تغییر باقی بماند.