এসকিউএল সার্ভারের সমতুল্য ওরাকল ইউজিং ইন্ডেক্স প্রবন্ধের সমতুল্য


9

ওরাকল-এ আইএনডিএক্সএক্স ক্লজটি ব্যবহার করার জন্য কি এসকিউএল সার্ভার ২০০৮ এর সমতুল্য? বিশেষত নির্মাণের জন্য:

CREATE TABLE c(c1 INT, c2 INT);
CREATE INDEX ci ON c (c1, c2);
ALTER TABLE c ADD CONSTRAINT cpk PRIMARY KEY (c1) USING INDEX ci;

স্বতন্ত্র সূচির উপর বর্ধিত সার্কেল ডকুমেন্টেশনে এটি উল্লেখ করেছে (জোর দেওয়া হয়েছে):

অনন্য সূচকগুলি নিম্নলিখিত উপায়ে প্রয়োগ করা হয়:

প্রাথমিক কী বা স্বতন্ত্র সীমাবদ্ধতা

আপনি যখন কোনও প্রাথমিক কী সীমাবদ্ধতা তৈরি করেন, তখন টেবিলের একটি ক্লাস্টারড সূচক ইতিমধ্যে উপস্থিত না থাকলে এবং আপনি কোনও অনন্য অবিচ্ছিন্ন সূচক নির্দিষ্ট না করলে কলাম বা কলামগুলিতে একটি অনন্য ক্লাস্টারড সূচক স্বয়ংক্রিয়ভাবে তৈরি হয় । প্রাথমিক কী কলামটি নুল মানকে অনুমতি দিতে পারে না।

যা এর দ্বারা বোঝা যাচ্ছে যে প্রাথমিক কী এর জন্য কোন সূচকটি ব্যবহার করা উচিত তা নির্দিষ্ট করার একটি উপায় রয়েছে।


টেবিলের সাথে কেবল পিকে সংজ্ঞায়িত করুন। create table c (c1 int not null primary key, c2 int)
a_horse_with_no_name

এটি "পিকে তৈরির একটি নামযুক্ত সূচক ব্যবহার করুন" অংশ যা আমি আগ্রহী
নিক

না এটি করার কোনও উপায় নেই। একটি প্রাথমিক কী একটি সীমাবদ্ধতা এবং একটি সূচক। আপনি প্রাথমিক কীটি সরবরাহ করেছেন তাতে ডিফল্টরূপে একটি অনন্য ক্লাস্টারড সূচক হবে। যা আপনি যেখানে যেখানে ক্লজটিতে সি 1 এবং সি 2 উভয়কে অন্তর্ভুক্ত না করে অন্য সংজ্ঞায়িত সূচকটিকে একটি সদৃশ করে তুলবেন।
হারুন

উত্তর:


7

ওরাকল-এ আইএনডিএক্সএক্স ক্লজটি ব্যবহার করার জন্য কি এসকিউএল সার্ভার ২০০৮ এর সমতুল্য?

না S আপনি যখন এসকিউএল সার্ভারে একটি প্রাথমিক কী বা অনন্য সীমাবদ্ধতা তৈরি করেন, সেই সীমাবদ্ধতার সমর্থনের জন্য একটি অনন্য সূচক একই কীগুলির সাহায্যে স্বয়ংক্রিয়ভাবে তৈরি হয়।

যা এর দ্বারা বোঝা যাচ্ছে যে প্রাথমিক কী এর জন্য কোন সূচকটি ব্যবহার করা উচিত তা নির্দিষ্ট করার একটি উপায় রয়েছে।

না। ডকুমেন্টেশনটি কেবল ব্যাখ্যা করার চেষ্টা করছে যে আপনি উল্লেখ না করলে স্বয়ংক্রিয় সমর্থন সূচকটি ক্লাস্টারযুক্ত বা নন-ক্ল্লাস্টার হিসাবে তৈরি করা হবে কিনা। এটি বিভ্রান্তিকরভাবে বলা হয়, আমি একমত।

পরিষ্কার করার জন্য, আপনি যখন কোনও অগ্রাধিকার প্রকাশ না করে কোনও বিদ্যমান টেবিলটিতে প্রাথমিক কী সীমাবদ্ধতা যুক্ত করেন, টেবিলটিতে পূর্ব-বিদ্যমান ক্লাস্টার ইনডেক্স না থাকলে সমর্থনকারী সূচকটি ক্লাস্টার হবে । যদি ইতিমধ্যে একটি ক্লাস্টার্ড সূচক থাকে তবে সমর্থনকারী সূচকটি অবিচ্ছিন্ন হিসাবে তৈরি করা হবে

আপনি বিশেষত: PRIMARY KEY CLUSTEREDবা ব্যবহার করে একটি ক্লাস্টারযুক্ত বা অবিচ্ছিন্ন প্রাথমিক কীটির জন্য অনুরোধ করতে পারেন PRIMARY KEY NONCLUSTERED

ন্যায্যতার সাথে ডকুমেন্টেশন এ বিষয়ে এখানে আরও স্পষ্ট:

টেবিল_সংশ্লিষ্ট (লেনদেন-এসকিউএল)


5

একটি ক্লাস্টারড ইনডেক্স তৈরির জন্য এসকিউএল সার্ভার সিনট্যাক্স যা এটিও একটি প্রাথমিক কী:

CREATE TABLE dbo.c
(
    c1 INT NOT NULL, 
    c2 INT NOT NULL,
    CONSTRAINT PK_c
    PRIMARY KEY CLUSTERED (c1, c2)
);

আপনার মন্তব্য যতদূর: "একটি পিকে নামযুক্ত সূচক ব্যবহার করা", উপরের কোডটির ফলে প্রাথমিক কী সূচকটির নাম "পিকে_সি" হবে।

প্রাথমিক কী এবং ক্লাস্টারিং কী একই কলামে থাকতে হবে না। আপনি তাদের আলাদাভাবে সংজ্ঞায়িত করতে পারেন। উপরের উদাহরণে, CLUSTEREDকীওয়ার্ডটি এতে পরিবর্তন করুন NONCLUSTEREDএবং তারপরে CREATE INDEXসিনট্যাক্সটি ব্যবহার করে কেবল একটি ক্লাস্টারড ইনডেক্স যুক্ত করুন :

CREATE TABLE dbo.c
(
    c1 INT,
    c2 INT,
    CONSTRAINT PK_c
    PRIMARY KEY NONCLUSTERED (c1, c2)
);

CREATE CLUSTERED INDEX CX_c ON dbo.c (c2);

এসকিউএল সার্ভারে ক্লাস্টার্ড ইনডেক্সটি হ'ল টেবিল, এগুলি এক এবং একই। একটি ক্লাস্টার্ড সূচকটি সারণীতে সঞ্চিত সারিগুলির যৌক্তিক ক্রম সংজ্ঞায়িত করে। আমার প্রথম উদাহরণে, সারিগুলি c1এবং c2কলামগুলির মান অনুসারে সংরক্ষণ করা হয় । যেহেতু ক্লাস্টারিং কী এছাড়াও প্রাথমিক কী, সমন্বয় হিসাবে সংজ্ঞায়িত করা হয় c1এবং c2টেবিল ব্যাপী অনন্য হওয়া আবশ্যক।

দ্বিতীয় উদাহরণে, প্রাথমিক কীটি c1এবং c2কলামগুলির সমন্বয়ে গঠিত , তবে ক্লাস্টারিং কীটি কেবল c2কলাম। যেহেতু আমি বিবৃতিতে UNIQUEবৈশিষ্ট্যটি নির্দিষ্ট করেছি না CREATE INDEX, তাই ক্লাস্টারিং কী ( c2) টেবিল জুড়ে অনন্য হতে হবে না। একটি "ইউনিকফিফায়ার" স্বয়ংক্রিয়ভাবে এসকিউএল সার্ভার দ্বারা c2তৈরি হবে এবং ক্লাস্টারিং কী তৈরি করতে কলামের মানগুলিতে সংযুক্ত হবে । এই ক্লাস্টারিং কীটি যেহেতু এটি এখন অনন্য, তাই টেবিলে তৈরি অন্যান্য সূচীতে সারি আইডি হিসাবে ব্যবহৃত হবে।

ক্লাস্টারিং কীটি স্টোরেজে সারিগুলির বিন্যাস নিয়ন্ত্রণ করে তা প্রমাণ করার জন্য, আপনি অনাবন্ধিত ফাংশনটি ব্যবহার করতে পারেন fn_PhysLocCracker(%%PHYSLOC%%),। নিম্নলিখিত কোডটি দেখায় যে সারিগুলি c2কলামের ক্রম অনুসারে ডিস্কে বিছিয়ে দেওয়া হয়েছে , যা আমি ক্লাস্টারিং কী হিসাবে সংজ্ঞায়িত করেছি:

USE tempdb;

CREATE TABLE dbo.PKTest
(
    c1 INT NOT NULL
    , c2 INT NOT NULL
    , c3 VARCHAR(256) NOT NULL
);

ALTER TABLE PKTest 
ADD CONSTRAINT PK_PKTest 
PRIMARY KEY NONCLUSTERED (c1, c2);

CREATE CLUSTERED INDEX CX_PKTest 
ON dbo.PKTest(c2);

TRUNCATE TABLE dbo.PKTest;

INSERT INTO dbo.PKTest (c1, c2, c3)
SELECT TOP(25) o1.object_id / o2.object_id, o2.object_id, o1.name + '.' + o2.name
FROM sys.objects o1
    , sys.objects o2
WHERE o1.object_id >0 
    and o2.object_id > 0;

SELECT plc.file_id
    , plc.page_id
    , plc.slot_id
    , pk.*
FROM dbo.PKTest pk
CROSS APPLY fn_PhysLocCracker(%%PHYSLOC%%) plc;

আমার টেম্পডিবি থেকে প্রাপ্ত ফলাফলগুলি হ'ল:

এখানে চিত্র বর্ণনা লিখুন

উপরের চিত্রটিতে, প্রথম তিনটি কলামটি fn_PhysLocCrackerডিস্কে সারিগুলির দৈহিক ক্রম দেখিয়ে ফাংশন থেকে আউটপুট হয় । আপনি slot_idমানটির সাথে মান বৃদ্ধি করে লক-স্টেপ দেখতে পাচ্ছেন c2যা ক্লাস্টারিং কী। প্রাথমিক কী সূচকটি সারিগুলি একটি পৃথক ক্রমে সংরক্ষণ করে, যা এসকিউএল সার্ভারকে প্রাথমিক কী স্ক্যান করে ফলাফল ফেরত দিতে বাধ্য করে দেখা যায়:

SELECT pkt.c1
    , pkt.c2
FROM dbo.PKTest pkt WITH (INDEX = PK_PKTest, FORCESCAN);

দ্রষ্টব্য, ORDER BYযেহেতু আমি প্রাথমিক কী সূচকগুলিতে আইটেমগুলির ক্রম দেখানোর চেষ্টা করছি তাই আমি উপরের বিবৃতিতে একটি ধারা ব্যবহার করি নি ।

উপরের ক্যোয়ারী থেকে আউটপুটটি হ'ল:

এখানে চিত্র বর্ণনা লিখুন

fn_PhysLocCrackerফাংশনটির দিকে চেয়ে আমরা প্রাথমিক কী সূচকের শারীরিক ক্রম দেখতে পারি।

SELECT plc.file_id
    , plc.page_id
    , plc.slot_id
    , pkt.c1
    , pkt.c2
FROM dbo.PKTest pkt WITH (INDEX = PK_PKTest, FORCESCAN)
CROSS APPLY fn_PhysLocCracker(%%PHYSLOC%%) plc;

যেহেতু আমরা কেবলমাত্র সূচক থেকে নিজেই পড়ছি, অর্থাত্ সূচকের বাইরে কোনও কলামই কোয়েরিতে উল্লেখ করা হচ্ছে না, %%PHYSLOC%%মানগুলি সূচীতেই পৃষ্ঠাগুলি উপস্থাপন করে।

ফলাফলগুলো:

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.