প্রশ্নটি এসকিউএল সার্ভার 2000-এ ট্যাগ করা হয়েছে তবে সর্বশেষ সংস্করণে বিকাশমান মানুষের সুবিধার জন্য আমি প্রথমে এটি সম্বোধন করব।
এসকিউএল সার্ভার 2014
এসকিউএল সার্ভার ২০১৪-এর নীচে আলোচিত সীমাবদ্ধতা ভিত্তিক সূচকগুলি যুক্ত করার পদ্ধতিগুলি ছাড়াও অনন্য অনন্য সূচকগুলিকে সরাসরি টেবিলের পরিবর্তনশীল ঘোষণায় ইনলাইন সিনট্যাক্সের সাথে নির্দিষ্ট করার অনুমতি দেয়।
উদাহরণস্বরূপ সিনট্যাক্স নীচে।
/*SQL Server 2014+ compatible inline index syntax*/
DECLARE @T TABLE (
C1 INT INDEX IX1 CLUSTERED, /*Single column indexes can be declared next to the column*/
C2 INT INDEX IX2 NONCLUSTERED,
INDEX IX3 NONCLUSTERED(C1,C2) /*Example composite index*/
);
অন্তর্ভুক্ত কলামগুলির সাথে ফিল্টার করা সূচি এবং সূচকগুলি বর্তমানে এই সিনট্যাক্সের সাহায্যে ঘোষণা করা যাবে না তবে এসকিউএল সার্ভার 2016 এটিকে আরও কিছুটা শিথিল করে। সিটিপি ৩.১ থেকে এখন টেবিল ভেরিয়েবলের জন্য ফিল্টারড সূচকগুলি ঘোষণা করা সম্ভব। আরটিএম দ্বারা এটি এমন ক্ষেত্রে হতে পারে যা অন্তর্ভুক্ত কলামগুলিও অনুমোদিত হয় তবে বর্তমান অবস্থানটি হ'ল তারা "সংস্থানীয় সংস্থাগুলির কারণে সম্ভবত এটি এসকিউএল 16 তে পরিণত করবে না"
/*SQL Server 2016 allows filtered indexes*/
DECLARE @T TABLE
(
c1 INT NULL INDEX ix UNIQUE WHERE c1 IS NOT NULL /*Unique ignoring nulls*/
)
এসকিউএল সার্ভার 2000 - 2012
আমি কি নামের উপর একটি সূচক তৈরি করতে পারি?
সংক্ষিপ্ত উত্তর: হ্যাঁ
DECLARE @TEMPTABLE TABLE (
[ID] [INT] NOT NULL PRIMARY KEY,
[Name] [NVARCHAR] (255) COLLATE DATABASE_DEFAULT NULL,
UNIQUE NONCLUSTERED ([Name], [ID])
)
আরও বিস্তারিত উত্তর নীচে।
SQL সার্ভার ঐতিহ্যগত টেবিল হয় একটি ক্লাস্টার সূচক থাকতে পারে বা হিসাবে গঠিত হয় গাদা ।
ক্লাস্টারড ইনডেক্সগুলি হ'ল ডুপ্লিকেট কী মানগুলি অস্বীকার করার জন্য অনন্য হিসাবে ঘোষণা করা যেতে পারে বা অনন্যকে অনন্য হিসাবে নির্ধারণ করা যেতে পারে। যদি অনন্য না হয় তবে এসকিউএল সার্ভার নীরবে কোনও অনুলিপি কীগুলিকে অনন্য করে তুলতে একটি অনন্যতা যুক্ত করে।
নন ক্লাস্টারযুক্ত সূচিগুলিও স্পষ্টভাবে অনন্য হিসাবে ঘোষণা করা যেতে পারে। অন্যথায় অ-অনন্য ক্ষেত্রে এসকিউএল সার্ভার সমস্ত সূচি কীগুলিতে সারি লোকেটার (ক্লাস্টারড ইনডেক্স কী বা একটি গাদা জন্য রাইড ) যুক্ত করে (এটি কেবল অনুলিপি নয়) এটি আবার নিশ্চিত করে যে তারা অনন্য are
এসকিউএল সার্ভারে 2000 - 2012 সারণী ভেরিয়েবলগুলিতে সূচকগুলি কেবল UNIQUE
বা PRIMARY KEY
বাধা তৈরি করেই স্পষ্টত তৈরি করা যায় । এই সীমাবদ্ধতার ধরণের মধ্যে পার্থক্য হ'ল প্রাথমিক কীটি অবশ্যই ননীয় কলামে থাকা উচিত। একটি অনন্য সীমাবদ্ধতায় অংশ নেওয়া কলামগুলি শুল্কযুক্ত হতে পারে। (যদিও এসকিউএল সার্ভারের উপস্থিতিতে অনন্য প্রতিবন্ধকতার প্রয়োগ NULL
এসকিউএল স্ট্যান্ডার্ডে উল্লিখিত অনুযায়ী নেই)। এছাড়াও একটি সারণীতে কেবলমাত্র একটি প্রাথমিক কী থাকতে পারে তবে একাধিক অনন্য বাধা থাকতে পারে।
এই উভয় যৌক্তিক প্রতিবন্ধকতা একটি অনন্য সূচক সহ শারীরিকভাবে প্রয়োগ করা হয়। যদি স্পষ্টভাবে নির্দিষ্ট না করা হয় অন্যথায় এটি PRIMARY KEY
ক্লাস্টারড ইনডেক্সে পরিণত হবে এবং অযৌক্তিক বাঁধাগুলি অ ক্লাস্টারযুক্ত নয় তবে এই আচরণটি সীমাবদ্ধতার ঘোষণার (উদাহরণ বাক্য সংশ্লেষ) দ্বারা নির্দিষ্ট CLUSTERED
বা NONCLUSTERED
স্পষ্ট করেই এই আচরণটি ওভাররাইড করা যেতে পারে
DECLARE @T TABLE
(
A INT NULL UNIQUE CLUSTERED,
B INT NOT NULL PRIMARY KEY NONCLUSTERED
)
উপরের ফলাফল হিসাবে নিম্নলিখিত সূচীগুলি স্পষ্টতই এসকিউএল সার্ভার 2000 - 2012-এ সারণি ভেরিয়েবলগুলিতে তৈরি করা যেতে পারে।
+-------------------------------------+-------------------------------------+
| Index Type | Can be created on a table variable? |
+-------------------------------------+-------------------------------------+
| Unique Clustered Index | Yes |
| Nonunique Clustered Index | |
| Unique NCI on a heap | Yes |
| Non Unique NCI on a heap | |
| Unique NCI on a clustered index | Yes |
| Non Unique NCI on a clustered index | Yes |
+-------------------------------------+-------------------------------------+
শেষটির কিছুটা ব্যাখ্যা দরকার। এই উত্তরটির শুরুতে টেবিলের পরিবর্তনশীল সংজ্ঞাটিতে অনন্য অনন্য ক্লাস্টারযুক্ত সূচকটি অনন্য সূচক Name
দ্বারা সিমুলেটেড করা হয়েছে (মনে রাখবেন যে এসকিউএল সার্ভার নিঃশব্দে ক্লাস্টারড ইনডেক্স কীটি কোনওভাবেই অদ্বিতীয় এনসিআই কীতে যুক্ত করবে)।Name,Id
কোনও অনন্য ক্লাস্টারড সূচকটি ম্যানুয়ালি IDENTITY
একটি কালিমা যুক্ত করে একটি স্বতন্ত্রকরণ হিসাবে কাজ করার জন্যও অর্জন করা যেতে পারে ।
DECLARE @T TABLE
(
A INT NULL,
B INT NULL,
C INT NULL,
Uniqueifier INT NOT NULL IDENTITY(1,1),
UNIQUE CLUSTERED (A,Uniqueifier)
)
তবে এটি কোনও অনন্য ক্লাস্টারড সূচক সাধারণত কীভাবে এসকিউএল সার্ভারে বাস্তবায়িত হবে তার সঠিক সিমুলেশন নয় কারণ এটি সমস্ত সারিতে "ইউনিকফায়ার" যুক্ত করে। যেগুলি কেবল এটির প্রয়োজন তা নয়।