یادگیری رایگان SQL Server
MSSQLServer یکی از سیستم های مدیریت بانک های اطلاعاتی رابطه ای (Relational)است که توسط شرکت مایکروسافت ارائه شده استSQL Serverاز مدل سرویس دهنده - سرویس گیرنده(Client/Server)تبعیت می نماید. در این مدل، درخواست های(InQuery)سرویس گیرندگان برای سرویس دهنده ارسال و در سمت سرویس دهنده بررسی و آنالیز می گردند. در ادامه، پردازش های مورد نیاز بر روی اطلاعات ذخیره شده در بانک های اطلاعاتی انجام و در نهایت، نتایج برای سرویس گیرنده ارسال خواهد شد.SQL Server با استفاده از مجموعه عناصری(Components)که به صورت هدفمند اجراء می گردند، قادر به تامین نیازها و درخواست ها از مخازن داده(Data Storages)می باشد.
راهنمای اجرای Query در Sql server
ترتیبی که طبق آن جدول ها در query های شما به یکدیگر متصل هستند، می تواند یک تاثیر نمایشی روی چگونگی اجراهای query شما داشته باشد. اگر query در ابتدا به جدول های بزرگتر و سپس به جدول های کوچکتر متصل شود، این امر باعث انجام پردازش های غیرضروری بسیاری توسط موتور SQL می شود.
استفاده از عملکردها به عنوان نوعی از برنامه نویسی معمولا تمرین خوبی است، چرا که به طور کل کد را خواناتر کرده و به شما اجازه می دهد که بارها بارها از آن استفاده کنید. این مسئله در مورد queryهای SQL هم درست میباشد، به جز در این مورد که مواردی وجود دارند که در هنگام اجراهای پشت سر هم یک وضعیت، ممکن است راه موثری برای رسیدن به نتیجه نباشد.
در بسیاری از موارد وقتی از اپراتور <> استفاده می کنیم (یا هر اپراتور دیگری در ارتباط با NOT، به عنوان مثال NOT IN) جستجوهای ایندکس اجرا نخواهند شد و در عوض اسکن یک جدول یا ایندکس لازم می باشد.
همانطور که در موضوعات قبلی ذکر کردیم، فراخوانی عملکردها کد را خواناتر کرده، اما در برخی موارد باعث تاثیرات ناخواسته ی دیگری می شوند که اجرای queryهای ما را کاهش می دهد. سناریوهای خاص استفاده از یک عملکرد در یک عبارت WHERE یکی از این موارد می باشد.
در طول دوره ای که DBA بودم، اشتباهات متداولی را در هنگام مرور query های SQL مشاهده کردم که برخلاف سیستم هایی که تنظیم می کردم، اجرا می شدند. با این تجربه دریافتم که دستورالعمل های کلی وجود دارند که باید درهنگام نوشتن query ها و همچنین طراحی یک نمودار دیتابیس دنبال شوند.
هنگامی که از اپراتور LIKE استفاده می کنید و اولین کاراکتر در رشته ی جستجو یک کاراکتر wildcraft باشد، % یا SQL Optimizer مجبور خواهند بود که اسکن یک جدول یا ایندکس را در هنگام اجرای query انجام دهند.
استفاده از یک جدول مشتق شده به جای IN predicate زمانیکه در حال گردآوری داده هستیم، به ما اجازه می دهد تا فقط رکوردهای خاصی از جدول را پردازش کنیم، بنابراین کاهش منابع نیاز به اجرای یک query دارد.
وقتی که یک ایندکس می تواند به اجرای یک query و ستون هایی که JOIN predicate شما را تشکیل می دهند، کمک کند سناریوهای مختلفی وجود دارد و مسئله ی مهمی می باشد.
ترتیبی که ستون ها در ایندکس های شما تعیین می شوند، بر این موضوع تاثیر دارد که هنگامی که SQL Optimizer، query شما را تجزیه می کند، آیا کل ایندکس مورد استفاده قرار می گیرد یا نه.
دو نوع ذخیره سازی برای جدول ها درSQL Server وجود دارد، جدول های Heap و جدول های Clustered. جدول های Heap جدول هایی هستند که clustered index روی خود ندارند و جدول های Clustered جدول هایی هستند که دارای clustered index می باشند. دلایل کمی وجود دارند که علت توصیه شدن به اینکه جدول ها دارای clustered index باشند را توضیح می دهند.
استفاده از گزینه ی DELETE CASCADE در تعاریف محدودیت کلید خارجی به معنای اجرای بهتر و کد کمتر در هنگام حذف رکدوردها از جدول هایی است که دارای یک رابطه ی parent-child تعریف شده می باشند.
نمودار denormalize گاهی اجرای بهتری برای query ارائه می دهد، گرچه ممکن است به معنای ذخیره ی داده های غیرضروری باشد. تنها سوال که مطرح می شود این است که فضای اضافه استفاده شده به سود اجرا می افزاید.