خانه SQL Server Cardinality Estimator در SQL Server 2014 SQL Server افزایش سرعت SQL Server نوشته شده توسط: سحر بیرامی تاریخ انتشار: ۱۵ آذر ۱۳۹۴ آخرین بروزرسانی: ۲۲ مهر ۱۴۰۲ زمان مطالعه: 4 دقیقه ۱ (۱) با یک مثال شروع می کنیم ابتدا یک جدول ایجاد کرده و هزار رکورد در آن درج می کنیم و یک کوئری با شرط Where بر روی جدول اجرا می کنیم. Sql به صورت خودکار یک Statistic Column بواسطه شرطی که در کوئری گذاشتم ایجاد میکند . حال مسئله این است که اگر ما هر کوئری برای به دست آوردن زیر مجموعه ای از هزار رکورد اجرا کنیم ، Optimizer تعداد رکوردهای تخمینی را از روی Column Statistic به دست می آورد ( منظور همان Column Statistic ساخته شده هنگام اجرای اولین کوئری است ). اگر ۵۰۰ رکورد دیگر به جدول اضافه کنیم ، statistic به علت محدودیت آستانه خود ، به طور خودکار بروز نمی شود( در واقع Sql تا زمانی که به حداکثر ظرفیت آستانه آمار و یا همان Statistic نرسیده باشد ، آن را بروز میکند) و اگر ما کوئری برای واکشی رکوردهای جدیدا اضافه شده اجرا کنیم ، با برآوردگر کاردینالیتی قدیم (قبل از ۲۰۱۴) تعداد رکوردهای تخمینی ۱ است ، چون که هیچ Statistic ای برای رکوردهای جدیدی که اضافه کردیم ، ساخته نشده است ولی اگر ما کوئری را با استفاده از کاردینالیتی جدید اجرا کنیم تعداد رکوردهای تخمینی نسبت به کاردینالیتی قدیم ، خیلی نزدیک به تعداد واقعی است. این مسئله در واقع یک پیشرفت خوب محسوب میشود . (در افزایش سرعت کوئری ها تاثیر خوبی دارد ). مثال مطرح شده را قدم به قدم بررسی می کنیم : ابتدا یک جدول ایجاد کرده و هزار رکورد در آن درج می نمائیم و سپس یک کوئری برای به دست آوردن شناسه های کوچکتر از ۸۰۰ اجرا میکنیم ، خواهیم دید که یک Statistic ایجاد میشود. حالا کوئری زیر را برای مشاهده نام statistics ایجاد شده بر روی ستون id اجرا می کنیم . این نام ممکن است در سیستم های مختلف متفاوت باشد. نام statistics را در کوئری زیر جایگزین و کوئری را اجرا میکنیم ( همانطور که در تصویر مشخص شده است تعداد رکوردها را ۱۰۰۰ نمایش میدهد) حالا کوئری برای درج ۵۰۰ رکورد دیگر اجرا می کنیم: اگر بعد از درج ۵۰۰ رکورد ، هدر مربوط به Statistics را مجددا بررسی کنیم می بینیم که تعداد کل رکوردها همان مقدار قبلی است (هزار رکورد ) . علت این امر همان محدودیت آستانه Statistic است . کوئری برای به دست اوردن رکوردهایی که جدیدی که اضافه کردیم همراه با Actual Execution Plan اجرا می کنیم . مورد جالبی که مشاهده میشود این است که Statistic چیزی راجع به رکوردهای جدبد اضافه شده نمیداند و تعداد رکوردهای تخمینی را یک بر میگداند. تعداد رکوردهای تخمینی یک برگردانده میشود و این مسئله خوبی برای Performance محسوب نمیشود. حالا مشابه این کوئری را در CE جدید (در sql 2014 ) بررسی می کنیم: مشاهده می کنید که تعداد رکوردهای تخمینی ۳۰۰ برگردانده شده و این به عدد واقعی نزدیکتر است. چه رتبه ای میدهید؟ میانگین ۱ / ۵. از مجموع ۱ اولین نفر باش معرفی نویسنده مقالات 1 مقاله توسط این نویسنده محصولات 0 دوره توسط این نویسنده سحر بیرامی معرفی محصول مسعود طاهری آموزش ۳ در ۱ Performance Tuning در SQL Server 6.700.000 تومان مقالات مرتبط ۲۶ شهریور SQL Server سرویس SQL Server Browser چیست؟ آشنایی با نحوه راه اندازی و کاربردها تیم فنی نیک آموز ۱۹ شهریور SQL Server علت Attach نشدن دیتابیس در SQL Server و راه حل آن تیم فنی نیک آموز ۱۱ شهریور SQL Server پروتکل های SSL و TLS چه تفاوت هایی دارند؟ تیم فنی نیک آموز ۰۸ شهریور SQL Server اهمیت مانیتورینگ در SQL Server چیست؟ | تمام آنچه که باید از مانیتورینگ بدانید تیم فنی نیک آموز دیدگاه کاربران لغو پاسخ دیدگاه نام و نام خانوادگی ایمیل ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم. موبایل برای اطلاع از پاسخ لطفاً مرا با خبر کن ثبت دیدگاه Δ فاضل واعظcom ۲۷ / ۰۹ / ۹۴ - ۱۱:۲۴ با سلام سایت بسیار خوبی دارید پاسخ به دیدگاه سلیم ظریف برگی ۲۰ / ۰۹ / ۹۴ - ۰۶:۴۹ بسیار مناسب و کاربردی و در عین حال روان و خوب توضیح داده شده بود با تشکر پاسخ به دیدگاه فرشید علی اکبری ۱۸ / ۰۹ / ۹۴ - ۰۳:۳۰ سلام تشکر از بابت ارائه این مقاله تون. بسیار جمع و جور و خلاصه و مفید بود… عالی.. موفق باشید. پاسخ به دیدگاه مجتبی شهریور ۱۵ / ۰۹ / ۹۴ - ۰۹:۰۱ جناب استاد طاهریسلاماز راهنمایی ارزشمند حضرتعالی متشکرم پاسخ به دیدگاه مسعود طاهری ۱۵ / ۰۹ / ۹۴ - ۰۷:۴۱ سلام خانم بیرامی متشکرم از ارائه مقاله خوبتان در سایت منتظر مقاله های بیشتر شما در نیک آموز هستیم موفق باشید پاسخ به دیدگاه مجتبی شهریور ۱۵ / ۰۹ / ۹۴ - ۰۶:۳۹ سلامضمن تشکر از مقاله خوبتون خانم بیرامیدر کل مقاله حضرتعالی مقاله خوبی بود و نقطه قوت مقاله در کاربردی بودن مقاله هست ولی کاش قبل رفتن به سر مثال مقداری مقدمه و پیشگفتار داشت تا با یک زمینه فکری خواننده مقاله به مثال و اصل موضوع ورود میکردد ودرک مقاله ملموس تر میشد…متشکرم پاسخ به دیدگاه مسعود طاهری ۱۵ / ۰۹ / ۹۴ - ۰۷:۱۹ مجتبی جان سلام درباره Cardinality Estimation در SQL Server در سایت چندین مقاله مفید ارائه شده است . دوستان عزیز برای کسب اطلاعات بیشتر در این خصوص به لینک های زیر مراجعه کنند. https://nikamooz.com/statistics-introduced-in-sql-server/ https://nikamooz.com/statistics-automatically-updated-by-sql-server/ پاسخ به دیدگاه مسعود طاهری ۱۵ / ۰۹ / ۹۴ - ۰۷:۱۹ مجتبی جان سلام درباره Cardinality Estimation در SQL Server در سایت چندین مقاله مفید ارائه شده است . دوستان عزیز برای کسب اطلاعات بیشتر در این خصوص به لینک های زیر مراجعه کنند. https://nikamooz.com/statistics-introduced-in-sql-server/ https://nikamooz.com/statistics-automatically-updated-by-sql-server/ پاسخ به دیدگاه