آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

جلوگیری از Index Nulification

دوره های مرتبط با این مقاله

جلوگیری از Index Nulification

Query های منتشر شده تلاش می کنند تا از شاخص های در دسترس استفاده کنند، زیرا آنها query ها را با مکانیزمی تولید می کنند که نتایج شما را تا حد ممکن سریع گزارش می دهند. به هرحال اگر مراقب نباشیم راه هایی وجود دارند که یک شاخص از طریق آنها می تواند خنثی شود.

توضیحات

اجازه بدهید به دو سناریو که با آن مواجه شده ام بپردازیم. اولین سناریو کلاسیک می باشد که در آن یک ستون ایندکس شده در یک عبارت WHERE با یک عملکرد در هم پیچیده می شود. وقتی که یک ستون ایندکس شده در یک عملکرد پیچیده می شود، SQL Server از هیچ شاخص موجودی روی ستون استفاده نخواهد کرد. در این مثال یک ایندکس روی ستون AccountNumber از Sales.Customer موجود می باشد، اما این جستجو روی AccountNumber اسکن خواهد شد. دیتابیس SQL Server در حال استفاده از یک مورد تلفیق حساس می باشد، بنابراین عملکرد UPPER اصلا ضروری نیست. اگر چک کردن مقادیر upper case لازم بودند، می توانیم یا دیتابیس را مجبور به ذخیره ی همه ی مقادیرAccountNumber به عنوان upper case کنیم و یا می توانیم یک ستون همراه ایجاد کنیم که موارد upper case را ذخیره می کند.

declare @AccountNumber varchar(10)‎
set @AccountNumber = 'AW00000424'‎
select * ‎
from Sales.Customer
where UPPER(AccountNumber) = @AccountNumber‎
آموزش SQL Server

سناریوی بعدی حاوی اولویت نوع داده می شود و داده ی اشتباه را به یک query انتقال می دهد. در جدول مشتری AccountNumber به عنوان varchar(10) تعریف شده است. در query بعدی یک متغیر از nvarchar(10) تعریف شده و به عنوان مبحث جستجو استفاده شده است. از آنجایی که انواع داده از یکدیگر متفاوت هستند، نوع داده با اولویت بالاتر مورد استفاده قرار خواهد گرفت. از آنجایی که داده ی nvarchar نسبت به داده ی varchar در اولویت است، ستون AccountNumber به طور ضمنی تبدیل شده و همان برنامه ی query مانند مثال قبل، تولید می شود. تداوم در اینجا مهم می باشد، سعی کنید اطمینان حاصل کنید که انواع داده هایی که به query های خود انتقال دادید، با انواع داده های مورد جستجوی ستون منسجم می باشند.

declare @AccountNumber nvarchar(10)‎
set @AccountNumber = 'AW00000424'‎
select * ‎
from Sales.Customer
where AccountNumber = @AccountNumber
  • 2133
  •    602
  • تاریخ ارسال :   1394/07/27

دانلود PDF دانشجویان گرامی اگر این مطلب برای شما مفید بود لطفا ما را در GooglePlus محبوب کنید
رمز عبور: tahlildadeh.com یا www.tahlildadeh.com
ارسال دیدگاه نظرات کاربران
شماره موبایل دیدگاه
عنوان پست الکترونیک

ارسال

آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

تمامی حقوق این سایت متعلق به آموزشگاه تحلیل داده می باشد .