تفاوت primary key با unique clustered index
با سلام و خسته نباشید خدمت شما
من در مورد clustered index اطلاعاتی دارم و خیلی هم در این مورد آموزش خواندم.
فقط این مورد را درست نمی دانم که تفاوت دو کوئری زیر در چیست :
USE [hassan] GO CREATE UNIQUE CLUSTERED INDEX [ClusteredIndex-20171002-083349] ON [dbo].[ReportsData] ( [ReportID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) GO
و
CREATE TABLE [dbo].[ReportsData2]( [ReportID] [int] NOT NULL, [ReportName] [varchar](100) NULL, [ReportNumber] [varchar](20) NULL, CONSTRAINT [PK_ReportsData1] PRIMARY KEY CLUSTERED ( [ReportID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO
در کوئری بالا ما یک primary key تعریف کرده ایم که به صورت clustered index هست تفاوت این با کوئری ماقبل در چیست؟
ممنون می شوم راهنمایی کنید
با تشکر
1 پاسخ
با سلام
من ی 10 سالی هست که دیگه برنامه نویسی کار نمی کنم اما تا جایی که یادمه :
primary key در سطح منطقی هستش و clustered index در سطح فیزیکی
وقتی شما قید primary key را بر روی یک ستون اعمال میکنید یعنی اینکه میخواهید که مقادیر این ستون یونیک باشند و sql server باید این قید رو هم در database فیزیکی شما هم پیادسازی کند که این کار رو با clustered index و nonclustered index انجام میده
به صورت پیشفرض وقتی شما قید primary key رو پیادسازی میکنید sql server در سطح فیزیکی اون رو بصورت clustered index پیادسازی میکنید و اگر شما بخواهید اون رو بصورت nonclustered index تعریف کنید کافیست جلوی قید primary key قید nonclustered رو هم اضافه کنید که در اینصورت Sql یک جدولی به نام heap برای شما میسازد
clustered index مستقیم بر روی داده های جدول اعمال می شود و سرعت خواند اطلاعات در آن به مراتب بالاتر است از nonclustered index