تفاوت‌ها و کاربرد‌های NEWID و NEWSEQUENTIALID

تفاوت‌ها و کاربرد‌های NEWID و NEWSEQUENTIALID

یک دیدگاه

تفاوت‌ها و کاربرد‌های NEWID و NEWSEQUENTIALID

چه در استفاده از دستورات DDL و تعریف ساختار جداول حین پیاده‌سازی ساختار Database و چه در بدنه Stored Procedure ها و حتی دستور SELECT در SQL Server مواردی وجود دارد که نیاز به استفاده از توابع Scalar مانند NEWID و NEWSEQUENTIALID خواهد بود. اگرچه هردو تابع NEWID و NEWSEQUENTIALID خروجی از نوع UNIQUEIDENTIFIER دارند ولی از نظر کاربرد و Performance با هم تفاوت‌های قابل ملاحظه‌ای دارند.

انتخاب درست Primary Key یکی از نکات مهم در طراحی Database است. گاهی وقتی از میان ستون‌های یک‌ جدول نمی‌توان گزینه‌ای مناسب به عنوان کلید اصلی انتخاب کرد، افزودن یک ستون جدید به عنوان Primary Key راهکار مناسبی خواهد بود. برای تضمین منحصر به فرد بودن مقادیری که این ستون وارد می‌کنیم، راهکار‌های گوناگونی وجود دارد. از ترکیب مقادیر و تولید ساختار کد اختصاصی در قالب User Defined Function تا استفاده از ویژگی IDENTITY هریک می‌تواند راهکاری مناسب باشد.

در این میان یکی از این راهکار‌ها استفاده از DEFAULT CONSTARINT و تابع NEWID و NEWSEQUENTIALID برای ستونی از نوع UNIQUEIDENTIFIER خواهد بود. در این‌حالت، با توجه به نوع ذخیره شدن داده‌ها بر روی دیسک بر اساس مقادیر CLUSTERED INDEX هر جدول، استفاده از مقادیر متوالی که توسط NEWSEQUENTIALID تولید می‌شود راهکاری هوشمندانه‌تر از NEWID است که مقادیر را به صورت تصادفی و منحصر به فرد تولید می‌کند.

از کدام استفاده کنیم NEWID یا NEWSEQUENTIALID؟

بسته به اینکه برای چه موردی قصد تولید UNIQEIDENTIFIER را دارید، می‌توان از NEWID و NEWSEQUENTIALID در جایگاه درستشان استفاده کرد. دقت داشته باشید، اولین و بارزترین تفاوت بین NEWID و NEWSEQUENTIALID در نحوه بکارگیری آنهاست. از تابع NEWID می‌توان در دستور SELECT، مقدار دهی به متغییر، تعیین مقدار پیش فرض ستون و … استفاده کرد. در حالی که تابع NEWSEQUENTIALID را فقط می‌توان برای تخصیص مقدارDEFAULT استفاده کرد.

همچنین با توجه به اینکه تابع NEWSEQUENTIALID مقادیر Random جدید را همواره در بازه مقادیر بزرگتر از آخرین مقدار تولید شده ایجاد می‌کند، از نظر Performance کارایی بهتری نسبت به NEWID دارد. از سوی دیگر NEWID هربار مقداری تصادفی ایجاد می‌کند که ممکن است بزرگتر یا کوچکتر از آخرین مقدار باشد. بنابراین تابع NEWID بازه گسترده تری را برای تولید مقدار تصادفی تحت پوشش داشته و Performance پایین تری خواهد داشت.

از سود دیگر تابع NEWID مقادیر را به صورت پراکنده تولید می‌کند و حدس زدن مقدار بعدی تولید شده کاری دشوارتر خواهد بود. بنابراین از دیدگاه امنیت، تابع NEWSEQUENTIALID قابل پیش‌بینی تر از NEWID می‌باشد.

** به این نکته توجه کنید: تابع NEWSEQUENTIALID از زمانی که سیستم عامل Windows شروع به کار کرده، مقادیر را در یک مسیر افزایشی به صورت Random تولید می‌کند و در صورت Restart شدن Windows این تابع می‌تواند از مقداری کمتر شروع به تولید مقادیر تصادفی کرده که همچنان منحصر به فرد خواهند بود.

آواتار کاربر

شهاب ساری اصلانی

از سال 1385 به صورت جدی مشغول تدریس در حوزه های برنامه نویسی دات نت و طراحی بانک های اطلاعاتی بوده ام. تدریس به عنوان یک حرفه همیشه برایم جذاب بوده و یادگیری جدیدترین مباحث لذت بخش است.

یک دیدگاه

  1. دی ۱۲, ۱۴۰۲

    I’m often to blogging and i really appreciate your content. The article has actually peaks my interest. I’m going to bookmark your web site and maintain checking for brand spanking new information. https://www.serezotomasyon.com.tr/

ارسال یک دیدگاه

آدرس ایمیل شما منتشر نخواهد شد.