নিরবিষ্ট গণিত কলাম এসকিউএল সার্ভারে নন-ক্লাস্টারড সূচক তৈরি করা হচ্ছে


10

এসকিউএল সার্ভার আসলে একটি অ-স্থিত গণিত কলামটি কীভাবে সঞ্চয় করে সে সম্পর্কে কোনও ডকুমেন্টেশন সন্ধান করতে আমি সংগ্রাম করছি।

নিম্নলিখিত উদাহরণটি ধরুন:

--SCHEMA
CREATE TABLE dbo.Invoice
(
    InvoiceID INT IDENTITY(1, 1) PRIMARY KEY,
    CustomerID INT FOREIGN KEY REFERENCES dbo.Customer(CustomerID),
    InvoiceStatus NVARCHAR(50) NOT NULL,
    InvoiceStatusID AS CASE InvoiceStatus 
                         WHEN 'Sent' THEN 1 
                         WHEN 'Complete' THEN 2
                         WHEN 'Received' THEN 3
                       END
)
GO

--INDEX
CREATE NONCLUSTERED INDEX IX_Invoice ON Invoice
(
    CustomerID ASC
)
INCLUDE
(
    InvoiceStatusID
)
GO

আমি পেয়েছি যে এটি পাতার স্তরে সঞ্চিত রয়েছে, তবে মানটি যদি অবিরত না হয় তবে কীভাবে কিছু সংরক্ষণ করা হয়? সূচী কীভাবে এসকিউএল সার্ভারকে এই পরিস্থিতিতে এই সারিগুলি সন্ধান করতে সহায়তা করে?

যে কোনও সহায়তা প্রশংসিত,

অনেক ধন্যবাদ,

সম্পাদনা করুন:

এর জবাব দেওয়ার জন্য ব্রেন্ট ও অ্যারনকে ধন্যবাদ, এখানে তারা কী ব্যাখ্যা করেছে তা স্পষ্টভাবে দেখাচ্ছে পেস্ট দ্য প্ল্যানটি


5
এটি টেবিলের ডেটা পৃষ্ঠাগুলিতে স্থির থাকে না, তবে এটি সূচকের পাতায় স্থির থাকে ।
অ্যারন বারট্র্যান্ড

অবিরাম গণিত কলামগুলি শারীরিকভাবে সারণীতে সংরক্ষণ করা হয় না। এগুলি ভার্চুয়াল কলাম। তাদের মানগুলি যখনই কোনও প্রশ্নের সাথে রেফারেন্স করা হয় ততবারই পুনরায় গণনা করা হয়। দেখতে এই সুত্র
কিন শাহ

উত্তর:


11

এসকিউএল সার্ভার যখন গণিত ক্ষেত্রে সূচক তৈরি করে, তখন গণিত ক্ষেত্রটি ডিস্কে লেখা হয় - তবে কেবলমাত্র সেই সূচকের 8K পৃষ্ঠায়। ক্লাস্টারড ইনডেক্সের মাধ্যমে এসকিউএল সার্ভারটি ইনভয়েস্ট্যাটাসিউডের অঙ্ক করতে পারে - এটি ক্লাস্টারড ইনডেক্সে লেখার দরকার নেই।

আপনি dbo.Ivvoice এ সারিগুলি সরিয়ে / আপডেট / সন্নিবেশ করার সাথে সাথে সূচীগুলিতে থাকা ডেটা আপ টু ডেট থাকে। (ইনভয়েসস্ট্যাটাস পরিবর্তিত হলে, এসকিউএল সার্ভার IX_Invoice আপডেট করতেও জানে))

আপনি নিজের জন্য এটি দেখার সর্বোত্তম উপায়টি হ'ল বাস্তবে এটি করা: এই বিষয়গুলি তৈরি করুন এবং ইনভয়েসস্ট্যাটাসআইডি ফিল্ডকে স্পর্শ করে এমন আপডেটগুলি সম্পাদন করুন। যদি সূচী আপডেটগুলি কোথায় ঘটছে তা দেখতে আপনি যদি সহায়তা চান তবে এক্সিকিউশন প্ল্যানটি পোস্ট করুন (পেস্টইপ্লান.কম এটির জন্য সহায়ক)।


1
@ উবারজেন 1 নং, যেমন তিনি ব্যাখ্যা করেছেন, এটি সন্নিবেশ / আপডেটের সময় সূচী পৃষ্ঠাগুলিতে লেখা আছে। যদি সূচকটি কলামে অ্যাক্সেস করতে ব্যবহৃত হয় তবে এটি কোনও কিছুর সংশোধন করতে হবে না।
অ্যারন বারট্র্যান্ড

আহ! আমি এখন আপনার সাথে আছি, দুঃখিত!
উবারজেন 1

6
@ ব্লাবল ভাল, কোনও অপরাধ নেই, তবে আমি মনে করি না এটি ব্রেন্টের উপর on তারা একই এক্সএমএলটি ড্রপবক্সে, এমএসডিএন ফোরামগুলিতে এখানে পেস্ট করতে পারত, মূলত যে কোনও জায়গায় অনলাইনে ... এখন যে সমস্ত অনলাইন পরিষেবা সেখানে ফাইল আপলোড করে এমন লোকদের দ্বারা প্রকাশিত গোপনীয়তার জন্য দায়বদ্ধ হওয়া দরকার?
অ্যারন বারট্র্যান্ড

2
@ ব্লুবলস হ্যাঁ, আপনি কেবল লোককে ওভারশিয়ারিং থেকে বিরত রাখতে পারবেন না। আরে, যাইহোক, ইনস্টাগ্রামে আমাকে অনুসরণ করুন - আমি ব্রেন্টো - এবং আমি আমার প্রাতঃরাশের ছবিগুলি সেখানে ভাগ করি। ;-)
ব্রেন্ট ওজার

4
প্রাইভেসি লিঙ্কে @ ব্লাবলস, এতে উল্লেখ করা হয়েছে: আপনি এখানে অনুলিপি / পেস্ট করেন এমন ডেটা সর্বজনীন । যে কেউ এটি পড়তে পারেন। কোনও সুরক্ষা নেই।
ypercubeᵀᴹ

8

একটি ইন্ডেক্স, অ-স্থায়ী নির্ণিত কলামের জন্য মান ডাটা পাতায় চলতে থাকে নয় টেবিল , কিন্তু এটা পাতায় স্থায়ী হয় সূচক । এটি 0, 1 বা একাধিক সূচীতে অবিচল থাকে তা নির্বিশেষে এটি টেবিলটিতে অ-স্থির থাকে।

আপনার দেওয়া উদাহরণটি গ্রহণ করে কেবল ব্রেন্টের বর্ণনাটি বর্ণনা করার জন্য আসুন একটি সারি প্রবেশ করান:

INSERT dbo.Invoice(CustomerID, InvoiceStatus) VALUES(1,N'Sent');

এখন, সূচী পৃষ্ঠাগুলি দেখুন:

DBCC TRACEON(3604, -1);
DBCC IND(N'dbname', N'dbo.Invoice', 2);

(স্পষ্টতই পরিবর্তন করুন dbname, এবং সূচক আইডি আপনার ক্ষেত্রে 2 টি নাও হতে পারে))

আউটপুট (আপনার অবশ্যই পৃথক হবে):

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

এবং পরিশেষে, আসুন পৃষ্ঠাটি PageType2 এর জন্য পরিদর্শন করুন :

DBCC PAGE(7, 1, 584, 3);

(আপনার ডেটাবেস আইডির সাথে ম্যাচ করার জন্য আপনাকে সম্ভবত 7 টি পরিবর্তন করতে হবে এবং আপনার যদি একাধিক ডেটা ফাইল থাকে PageFIDতবে প্রথম ফলাফল থেকে ম্যাচের জন্য আপনাকে দ্বিতীয় যুক্তিটি পরিবর্তন করতে হতে পারে ))

আউটপুট:

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

এটি সূচী পাতায়।


খুব দুর্দান্ত, ধন্যবাদ হারুন আমি প্রথমে প্রশ্নটি জিজ্ঞাসার কারণটি হ'ল আসল বিশ্বে অনুরূপ সূচক মোতায়েন করতে আমার কিছুটা সত্যই সমস্যা হচ্ছে, এবং হুডের নীচে কী চলছে তা সঠিকভাবে বুঝতে চেয়েছিলাম যাতে আমি বিষয়টিটি বের করতে পারি। এটি অনেক সাহায্য করে, ধন্যবাদ!
উবারজেন 1

1
@ উবারজেন 1 আপনি কি "প্রকৃত ঝামেলা" সংজ্ঞায়িত করতে পারেন? আপনি কি এই সমস্যা সম্পর্কে একটি প্রশ্ন পোস্ট করতে যাচ্ছেন ?
অ্যারন বারট্র্যান্ড

আমি এটি করতে পারি, আমি প্রথমে এটির মধ্যে নিজেকে আরও কিছু খনন করতে যাচ্ছিলাম, তবে কেবল তৈরি করতে সূচক বিবরণী ঠিক কী করছে তা আমার মাথা পেতে চেয়েছিল। টিএলডিআর হ'ল; আমার উপরের চালান টেবিলের সমান একটি বৃহত টেবিল রয়েছে, এটির প্রায় 400 মি রেকর্ড রয়েছে এবং দুর্ভাগ্যক্রমে অর্ডারস্ট্যাটাস কলামটি ঠিক মাঝখানে জুড়ে গেছে, সূচি ইত্যাদিকে কিছুটা বেদনাদায়ক করে তোলে। আমরা আপাতত একটি গণিত কলাম যুক্ত করেছি যে আমরা শেষ পর্যন্ত অবিরত থাকব এবং বর্ণচর ক্ষেত্রটিকে তার নিজস্ব টেবিলে সরিয়ে দেব। 1/2
উবারজেন 1

5
@ উবারজেন 1 হ্যাঁ, সূচকগুলিতে লেখার সময় গণনা করা কলামটি ডিস্কে প্রকৃতপক্ষে তৈরি হওয়ার কারণে, সেই সমস্ত ক্রিয়াকলাপ লগ করতে হবে। একটি সমাধান হতে পারে গণিত কলামের উপর নির্ভর করা বন্ধ করুন - হয় এই অভিব্যক্তিটিকে একটি দর্শন বা অ্যাডহক প্রশ্নের মধ্যে রাখুন, এবং যদি এটি কোনও বিকল্প না হয় আপনি কোনও নতুন কলাম কলাম তৈরি করতে পারেন, খণ্ডগুলিতে আপডেট করুন (লগ কিলিং এড়াতে) , তারপরে গণিত কলামটি ড্রপ করুন, নতুন কলামটির নাম পরিবর্তন করুন এবং ম্যানুয়ালি লিখতে আপনার ডিএমএল পরিবর্তন করুন। তবে প্রকৃতপক্ষে যেহেতু এটি অপ্রয়োজনীয় তথ্য আপনি বিদ্যমান ডেটা থেকে প্রাপ্ত করতে পারেন, তাই আমি প্রথম বিকল্পটি বেছে নেব।
অ্যারন বারট্র্যান্ড

2
অনেক ধন্যবাদ হারুন আমি খুশি হয়েছি যে আপনি এর সামনে একটি দৃষ্টিভঙ্গি রেখেছিলেন কারণ এটিও আমার সমাধানের সমাধান ছিল, সম্ভবত এই ধারণাটি পুনর্বিবেচনার সময় এসেছে!
উবারজেন 1

7

PERSISTEDএকটি গণিত কলামের বৈশিষ্ট্যটি সারণীতে (ক্লাস্টারড ইনডেক্স বা হিপ) মান বজায় রয়েছে কিনা এবং সূচিগুলিতে মানগুলি বজায় রয়েছে কিনা তা সম্পর্কিত।

CREATE INDEXনির্ণিত কলাম এবং ইনডেক্স সংক্রান্ত সীমাবদ্ধতা জন্য প্রয়োজনীয়তা আছে:

গণনাকারী কলামগুলি যেগুলি নির্বিচারক এবং সঠিক বা ত্রুটিযুক্ত কলামগুলি অন্তর্ভুক্ত করা যেতে পারে। চিত্র, নেক্সট, পাঠ্য, বার্চর (সর্বাধিক), এনভারচার (সর্বাধিক), ভের্বাইনারি (সর্বাধিক) এবং এক্সএমএল ডেটা টাইপ থেকে প্রাপ্ত গণিত কলামগুলি নন-কী কলামগুলিতে অন্তর্ভুক্ত করা যেতে পারে যতক্ষণ না গণনাকৃত কলামের ডেটা ধরণের হিসাবে অন্তর্ভুক্ত হিসাবে গ্রহণযোগ্য কলাম। আরও তথ্যের জন্য, গণিত কলামে সূচিগুলি দেখুন।

গণিত কলামটি বজায় রয়েছে কিনা তা নিয়ে কোনও সীমাবদ্ধতা নেই।

এবং আরও (অন্তর্ভুক্ত সম্পর্কে নয় তবে একটি সূচকের মূল অংশে গণিত কলামগুলি সম্পর্কে):

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

কোনও গণিত কলামকে সূচী করতে, গণনা করা কলামটি অবশ্যই (নির্ধারিত) নির্ণায়ক এবং যথাযথ। তবে, PERSISTEDসম্পত্তিটি ব্যবহার করে অন্তর্ভুক্ত করতে ইন্ডেক্সযোগ্য গণিত কলামগুলির প্রকারটি প্রসারিত করে:

...

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