PDA

View Full Version : بهینه سازی view



MiladMR
جمعه 03 مهر 1394, 00:18 صبح
باسلام خدمت اساتید
دو سوال داشتم از محضرتون
سوال اول اینکه فرض کنید جدولی با بیست فیلد داریم. حالا یک view با پنج تا از این فیلد ها ایجاد میکنیم. آیا این view نسبت به خود جدول بهینه است؟ و به عبارتی sql server برای واکشی این پنج فیلد تمام جدول رو واکشی میکنه یا فقط همین پنج فیلد؟
و حالا سوال مهمتر و اصلی. فرض کنید در یک view از فیلد های پنج جدول استفاده میکنیم. حالا برای انجام کاری در برناممون فقط از فیلد های دو جدول از این view استفاده میکنیم. در این حالت sql server تمام پنج جدول رو واکشی میکنه یا صرفا همون دو جدول؟ برای اینکار بهتر است یک view با همان دو جدول ایجاد بشه یا فرقی نداره؟

پیشاپیش ممنون از وقتتون و جواب هاتون.

مهدی نان شکری
جمعه 03 مهر 1394, 10:23 صبح
با سلام

View یک جدول مجازی می باشد که معمولا برای اهداف زیر تهیه می شود:
1) برای ساده سازی استفاده از پایگاه داده به طوری که کاربران بدون داشتن شناخت کامل از جزئیات پایگاه داده بتوانند با آن کار کنند.
2) به عنوان مکانیسمی برای اعمال موارد امنیتی
به عنوان نمونه فرض کنید شما از یک جدول نمی خواهید تعداد از فیلد ها را برای برخی از کاربران نمایش بدهید. برای این معمولا به جای دسترسی کامل به جدول، به ویو دسترسی داده می شود.
3) برای محافظت نرم افزار ها از تغییرات احتمالی در ساختار جداول!

پس همانطور که ملاحظه می کنید برای افزایش Performance از ویو استفاده نمی شود به عبارت دیگر ویو از لحاظ کارایی مانند Subquery عمل می کند و پایگاه داده برای اجرای آن معمولا کوئری داخل آن را expand می نماید.

البته نوع دیگری از ویو به عنوان indexed view در MSSQL و Materialized view در اوراکل وجود دارد که مانند جدول رفتار می کند و برای افزایش Performance استفاده میشود.
این نوع ویو مانند Non cluster index در زمان تغییرات مغادیر جدول اصلی توسط MSSQL بروز می شود.

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

موفق باشید

tooraj_azizi_1035
شنبه 11 مهر 1394, 15:54 عصر
سلام

1- SQL Server در مورد دستیابی دیتا با توجه به وجود ایندکس های مناسب بهرین پلن رو انتخاب میکنه. و در مورد تعداد ستون ها هم چون به شکل RowStore ذخیره مشه نه ColumnStore تمام Page هایی که کوئری رو ارضا می کنن لود میشن فارغ از تعداد ستون های درخواستی و بعد ستون های درخواستی نمایش داده می شن.
2- دستورات داخل ویو تعیین می کنند که چند جدول باید لود یشه اگه هر پنج جدول به عنوان مثال join شده باشن دیتا از هر پنج تا لو میشه.