
یادگیری سی شارپ از مفاهیم پایه تا پروژه محور: شیگرایی، کار با SQL و LINQ، ORMها (Entity Framework)، ساخت پروژه مدیریت رستوران با گزارشات حرفهای و امکانات کامل!
مشاهده بیشتر
تو این دوره SQL Server رو از صفر تا پیشرفته یاد میگیری! از تراکنشها و طراحی دیتابیس تا Query نویسی حرفهای و پروژههای واقعی مثل مدیریت فروش و سیستم مالی. همه چی رو با مثال و تمرین یاد میگیری و یه متخصص دیتابیس میشی!
مشاهده بیشترمشخصات مقاله
جلوگیری از Index Nulification
جلوگیری از Index Nulification
Query های منتشر شده تلاش می کنند تا از شاخص های در دسترس استفاده کنند، زیرا آنها query ها را با مکانیزمی تولید می کنند که نتایج شما را تا حد ممکن سریع گزارش می دهند. به هرحال اگر مراقب نباشیم راه هایی وجود دارند که یک شاخص از طریق آنها می تواند خنثی شود.
توضیحات
اجازه بدهید به دو سناریو که با آن مواجه شده ام بپردازیم. اولین سناریو کلاسیک می باشد که در آن یک ستون ایندکس شده در یک عبارت WHERE با یک عملکرد در هم پیچیده می شود. وقتی که یک ستون ایندکس شده در یک عملکرد پیچیده می شود، SQL Server از هیچ شاخص موجودی روی ستون استفاده نخواهد کرد. در این مثال یک ایندکس روی ستون AccountNumber از Sales.Customer موجود می باشد، اما این جستجو روی AccountNumber اسکن خواهد شد. دیتابیس SQL Server در حال استفاده از یک مورد تلفیق حساس می باشد، بنابراین عملکرد UPPER اصلا ضروری نیست. اگر چک کردن مقادیر upper case لازم بودند، می توانیم یا دیتابیس را مجبور به ذخیره ی همه ی مقادیرAccountNumber به عنوان upper case کنیم و یا می توانیم یک ستون همراه ایجاد کنیم که موارد upper case را ذخیره می کند.
1 2 3 4 5 6 | declare @AccountNumber varchar(10) set @AccountNumber = 'AW00000424' select * from Sales.Customer where UPPER(AccountNumber) = @AccountNumber <button></button> |

سناریوی بعدی حاوی اولویت نوع داده می شود و داده ی اشتباه را به یک query انتقال می دهد. در جدول مشتری AccountNumber به عنوان varchar(10) تعریف شده است. در query بعدی یک متغیر از nvarchar(10) تعریف شده و به عنوان مبحث جستجو استفاده شده است. از آنجایی که انواع داده از یکدیگر متفاوت هستند، نوع داده با اولویت بالاتر مورد استفاده قرار خواهد گرفت. از آنجایی که داده ی nvarchar نسبت به داده ی varchar در اولویت است، ستون AccountNumber به طور ضمنی تبدیل شده و همان برنامه ی query مانند مثال قبل، تولید می شود. تداوم در اینجا مهم می باشد، سعی کنید اطمینان حاصل کنید که انواع داده هایی که به query های خود انتقال دادید، با انواع داده های مورد جستجوی ستون منسجم می باشند.
1 2 3 4 5 6 | declare @AccountNumber nvarchar(10) set @AccountNumber = 'AW00000424' select * from Sales.Customer where AccountNumber = @AccountNumber <button></button> |