ডাটাবেস সূচী কীভাবে কাজ করে? [বন্ধ]


2417

আপনার ডেটা সেট আকারের আকার বৃদ্ধির সাথে সাথে সূচকগুলি এত গুরুত্বপূর্ণ যে দেওয়া হয়েছে, এমন কি কেউ ব্যাখ্যা করতে পারে যে ডাটাবেস-অজোনস্টিক স্তরে কীভাবে সূচক কাজ করে?

কোনও ক্ষেত্রকে সূচী করতে প্রশ্নের উপর তথ্যের জন্য, আমি কীভাবে একটি ডেটাবেস কলামকে সূচী করব তা দেখুন

উত্তর:


3545

কেন এটি প্রয়োজন?

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

কেবলমাত্র এক ফিল্ডে বেশ কয়েকটি রেকর্ড বাছাই করা যায় এই কারণে, আমরা বলতে পারি যে যে ক্ষেত্রটি বাছাই করা হয়নি তার অনুসন্ধানের জন্য লিনিয়ার অনুসন্ধানের প্রয়োজন যা N/2ব্লক অ্যাক্সেসের প্রয়োজন (গড়), যেখানে Nব্লকের সংখ্যা কোথায় টেবিল বিস্তৃত। যদি সেই ক্ষেত্রটি একটি অ-কী ক্ষেত্র হয় (যেমন স্বতন্ত্র এন্ট্রি ধারণ করে না) তবে পুরো টেবিল স্পেসটি অবশ্যই Nব্লক অ্যাক্সেসে অনুসন্ধান করা উচিত ।

বাছাই করা ক্ষেত্র সহ, বাইনারি অনুসন্ধান ব্যবহার করা যেতে পারে, এতে log2 Nব্লক অ্যাক্সেস রয়েছে। এছাড়াও যেহেতু ডেটাটিকে একটি নন-কী ক্ষেত্র হিসাবে বাছাই করা হয়, একবারে উচ্চতর মান সন্ধানের পরে বাকী টেবিলের নকল মানগুলি অনুসন্ধান করার প্রয়োজন হয় না। এইভাবে কর্মক্ষমতা বৃদ্ধি যথেষ্ট।

ইনডেক্সিং কি?

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

সূচকের অসুবিধেটি হ'ল এই সূচকগুলিকে ডিস্কে অতিরিক্ত স্থানের প্রয়োজন হয় যেহেতু সূচিগুলি মাইআইএসএএম ইঞ্জিন ব্যবহার করে একটি টেবিলের সাথে একত্রে সংরক্ষণ করা হয়, একই টেবিলের মধ্যে অনেকগুলি ক্ষেত্র যদি সূচী করা হয় তবে এই ফাইলটি অন্তর্নিহিত ফাইল সিস্টেমের আকারের সীমাতে দ্রুত পৌঁছতে পারে ।

এটা কিভাবে কাজ করে?

প্রথমত, আসুন একটি নমুনা ডাটাবেস টেবিল স্কিমা রূপরেখা করা যাক;

ফিল্ডের নাম ডিস্কে ডেটা টাইপ আকার
আইডি (প্রাথমিক কী) স্বাক্ষরিত INT 4 বাইট
ফার্স্টনেম চর (50) 50 বাইট
সর্বশেষ নাম চর (50) 50 বাইট
ইমেল ঠিকানা ঠিকানা (100) 100 বাইট

দ্রষ্টব্য : ডিস্কের মানটিতে একটি সঠিক আকারের অনুমতি দেওয়ার জন্য চরটি বারচারের জায়গায় ব্যবহার করা হয়েছিল। এই নমুনা ডাটাবেসে পাঁচ মিলিয়ন সারি রয়েছে এবং আন-ইনডেক্স করা হয়েছে। বেশ কয়েকটি প্রশ্নের পারফরম্যান্স এখন বিশ্লেষণ করা হবে। এগুলি আইডি (একটি বাছাই করা কী ক্ষেত্র) এবং ফার্স্টনেম (একটি নন-কী অরক্ষিত ক্ষেত্র) ব্যবহার করে একটি ক্যোয়ারী ।

উদাহরণ 1 - ক্রমবিহীন ক্ষেত্রের ক্ষেত্রগুলি বাছাই করা

আমাদের r = 5,000,000নির্দিষ্ট আকারের রেকর্ডগুলির নমুনা ডাটাবেস দেওয়া R = 204বাইটের রেকর্ড দৈর্ঘ্য দেয় এবং সেগুলি মাইএসএএম ইঞ্জিন ব্যবহার করে একটি সারণীতে সংরক্ষণ করা হয় যা ডিফল্ট ব্লক আকারের B = 1,024বাইট ব্যবহার করে । টেবিলের ব্লকিং ফ্যাক্টরটি bfr = (B/R) = 1024/204 = 5প্রতি ডিস্ক ব্লক হবে। টেবিলটি ধরে রাখতে মোট ব্লকের সংখ্যা হ'ল N = (r/bfr) = 5000000/5 = 1,000,000ব্লক।

আইডি ক্ষেত্রের একটি লিনিয়ার সন্ধানের N/2 = 500,000জন্য আইডি ক্ষেত্রটি একটি মূল ক্ষেত্র হিসাবে প্রদত্ত একটি মান খুঁজে পেতে গড় ব্লক অ্যাক্সেসের প্রয়োজন হবে । তবে যেহেতু আইডি ফিল্ডটিও বাছাই করা হয়েছে, বাইনারি অনুসন্ধান চালানো যেতে পারে যাতে গড় log2 1000000 = 19.93 = 20ব্লক অ্যাক্সেসের প্রয়োজন হয়। তাত্ক্ষণিকভাবে আমরা দেখতে পাচ্ছি এটি একটি কঠোর উন্নতি।

এখন ফার্স্টনাম ফিল্ডটি বাছাই করা হয়নি এবং কোনও মূল ক্ষেত্র নয়, সুতরাং বাইনারি অনুসন্ধান অসম্ভব, তেমনি মানগুলিও অনন্য নয়, এবং এইভাবে সারণীতে সঠিক N = 1,000,000ব্লক অ্যাক্সেসের জন্য শেষ সন্ধান করা প্রয়োজন । এই পরিস্থিতিটিই সূচককে সংশোধন করা লক্ষ্য করে।

একটি সূচক রেকর্ডে কেবল সূচকযুক্ত ক্ষেত্র এবং মূল রেকর্ডের একটি পয়েন্টার রয়েছে তা দেওয়া, এটি যুক্তি দেখায় যে এটি মাল্টি-ফিল্ড রেকর্ডের তুলনায় এটি ছোট হবে যা এটি দেখায়। সুতরাং সূচীতে নিজেই মূল টেবিলের চেয়ে কম ডিস্ক ব্লক প্রয়োজন, যার ফলে পুনরাবৃত্তি করতে কম ব্লক অ্যাক্সেস প্রয়োজন। প্রথম নাম ক্ষেত্রের একটি সূচির জন্য স্কিমাটি নীচে বর্ণিত;

ফিল্ডের নাম ডিস্কে ডেটা টাইপ আকার
ফার্স্টনেম চর (50) 50 বাইট
(রেকর্ড পয়েন্টার) বিশেষ 4 বাইট

দ্রষ্টব্য : মাইএসকিউএলে পয়েন্টারগুলি টেবিলের আকারের উপর নির্ভর করে দৈর্ঘ্যে 2, 3, 4 বা 5 বাইট হয়।

উদাহরণ 2 - সূচীকরণ

বাইটের r = 5,000,000একটি সূচক রেকর্ড দৈর্ঘ্য R = 54এবং ডিফল্ট ব্লক আকারের B = 1,024বাইট ব্যবহার করে আমাদের রেকর্ডের নমুনা ডাটাবেস দেওয়া । সূচকটির ব্লকিং ফ্যাক্টর bfr = (B/R) = 1024/54 = 18প্রতি ডিস্ক ব্লক হবে। সূচকটি ধরে রাখতে মোট ব্লকের সংখ্যা হ'ল N = (r/bfr) = 5000000/18 = 277,778ব্লক।

এখন ফার্স্টনেম ফিল্ড ব্যবহার করে একটি অনুসন্ধান কর্মক্ষমতা বাড়াতে সূচকটি ব্যবহার করতে পারে। এটি গড় log2 277778 = 18.08 = 19ব্লক অ্যাক্সেসের সাথে সূচকটির বাইনারি অনুসন্ধানের অনুমতি দেয় । প্রকৃত রেকর্ডের ঠিকানা সন্ধানের জন্য, যার পড়ার জন্য আরও ব্লক অ্যাক্সেসের প্রয়োজন, মোট 19 + 1 = 20অ্যাক্সেসগুলিতে ব্লক আনার জন্য , অন- সূচকযুক্ত সারণীতে প্রথম নামের ম্যাচ সন্ধানের জন্য 1,000,000 ব্লক অ্যাক্সেস থেকে দূরে চিৎকার ।

এটি কখন ব্যবহার করা উচিত?

প্রদত্ত যে সূচি তৈরির জন্য অতিরিক্ত ডিস্কের স্থান প্রয়োজন (উপরের উদাহরণ থেকে ২ 277,778 blocks ব্লক অতিরিক্ত, একটি ~ ২৮% বৃদ্ধি), এবং অনেকগুলি সূচক ফাইল সিস্টেমের আকার সীমা থেকে উদ্ভূত সমস্যা সৃষ্টি করতে পারে, সঠিক নির্বাচনের জন্য সতর্কতা অবলম্বন করতে হবে সূচিতে ক্ষেত্রগুলি।

যেহেতু সূচকগুলি কেবল রেকর্ডগুলির মধ্যে মিলের ক্ষেত্রের অনুসন্ধানে গতি বাড়ানোর জন্য ব্যবহৃত হয়, তাই এটি যুক্তি দাঁড়ায় যে কেবলমাত্র আউটপুট জন্য ব্যবহৃত সূচী ক্ষেত্রগুলি কেবল সন্নিবেশ করানো বা অপসারণের সময় ডিস্কের স্থান এবং প্রক্রিয়াজাতকরণের সময় অপচয় হবে এবং এইভাবে এড়িয়ে চলা উচিত. বাইনারি অনুসন্ধানের প্রকৃতিও দেওয়া হয়েছে, তথ্যের কার্ডিনালিটি বা স্বতন্ত্রতা গুরুত্বপূর্ণ। 2 এর কার্ডিনালিটিযুক্ত ক্ষেত্রটিতে সূচিটি ডেটা অর্ধেককে ভাগ করে দেবে, যেখানে 1000 এর কার্ডিনালিটি প্রায় 1000 টি রেকর্ড ফিরিয়ে আনবে। যেমন একটি নিম্ন কার্ডিনালিটির সাথে কার্যকারিতাটি একটি রৈখিক সাজানোর ক্ষেত্রে হ্রাস করা হয় এবং ক্যোরিয়াল অপটিমাইজার সূচকটি ব্যবহার এড়াতে পারে যদি কার্ডিনালিটি রেকর্ড সংখ্যার 30% এর চেয়ে কম হয়, কার্যকরভাবে সূচককে স্থানের অপচয় হিসাবে তৈরি করে।


8
বাইনারি অনুসন্ধান করা যায় যখন ডেটা অনন্য হয়, আমি ঠিক আছি? যদিও আপনি উল্লেখ করেছেন যে ন্যূনতম কার্ডিনালিটি গুরুত্বপূর্ণ, তবে অ্যালগরিদমটি একটি সাধারণ বাইনারি অনুসন্ধান নয়, কীভাবে এই আনুমানিকতা (~ লগ 2 এন) প্রক্রিয়াটির সময়কে প্রভাবিত করবে?
শ্যাম্পু

9
@ অভিষেকশিবকুমার: দুর্দান্ত প্রশ্ন! আমি মনে করি ডাটা টেবিলের মতো সূচি সারণীতে যতগুলি সারি থাকবে। এবং এই ক্ষেত্রটির মাত্র 2 টি মান থাকবে (সত্য / মিথ্যা দিয়ে বুলিয়ান) এবং বলুন যে আপনি মান সত্যের সাথে একটি রেকর্ড চান, তবে আপনি কেবল প্রথম পাসে ফলাফল নির্ধারিত অর্ধেক করতে পারবেন, দ্বিতীয় পাসে আপনার সমস্ত রেকর্ডের মান সত্য আছে তাই আছে পার্থক্য করার কোনও ভিত্তি নেই, এখন আপনাকে লিনিয়ার ফ্যাশনে ডেটা টেবিলটি অনুসন্ধান করতে হবে hence সুতরাং তিনি বলেছিলেন যে সূচকযুক্ত কলামটি সিদ্ধান্ত নেওয়ার সময় কার্ডিনালিটি বিবেচনা করা উচিত। এই ক্ষেত্রে, এই জাতীয় কলামে সূচি দেওয়া মূল্যহীন। আশা করি আমি ঠিক আছি :)
সৌরভ পাতিল

7
গড় ক্ষেত্রে ব্লক অ্যাক্সেসের সংখ্যা হওয়া উচিত নয় (N+1)/2। যদি আমরা সমস্ত সম্ভাব্য কেসগুলির জন্য ব্লক অ্যাক্সেসের সংখ্যা যোগ করে এবং কেস সংখ্যার দ্বারা ভাগ করে দিই, তবে আমাদের কাছে N*(N+1)/(2*n)এটি উপস্থিত হয়ে আসে (N+1)/2
অজয়

31
আমি মনে করি এই উত্তরে কয়েকটি টাইপো রয়েছে, উদাহরণস্বরূপ, বাক্যে: "অ-সূচকযুক্ত টেবিলের জন্য প্রয়োজনীয় 277,778 ব্লক অ্যাক্সেস থেকে একটি দীর্ঘ চিৎকার"। লেখক 1,000,000 ব্লক অ্যাক্সেস মানে না? 277,778 হ'ল সূচক দ্বারা প্রয়োজনীয় ব্লকের সংখ্যা। বেশ কয়েকটি অন্যান্য
ভুলত্রুটিও

5
@ জেএমসিএম তিনি "ইনডেক্সিং বিভাগটি" - এ ব্যাখ্যা করেছেন - "সূচীকরণ একাধিক ক্ষেত্রের মধ্যে বিভিন্ন রেকর্ড বাছাই করার একটি উপায় a একটি টেবিলের একটি ক্ষেত্রের উপর একটি সূচী তৈরি করা অন্য ডেটা কাঠামো তৈরি করে যা ক্ষেত্রের মান এবং পয়েন্টার ধারণ করে এটি সম্পর্কিত রেকর্ডের সাথে index এই সূচক কাঠামোটি বাছাই করা হবে, বাইনারি অনুসন্ধানগুলি এতে সম্পাদন করার অনুমতি দেয় "
গ্রিঞ্চ

292

ক্লাসিক উদাহরণ "বইগুলিতে সূচক"

১০০ টি অধ্যায় দ্বারা বিভক্ত ১০০০ পৃষ্ঠাগুলির একটি "বই" বিবেচনা করুন, প্রতিটি বিভাগে 100 পৃষ্ঠা রয়েছে pages

সরল, হাহ?

এখন, কল্পনা করুন আপনি একটি নির্দিষ্ট অধ্যায় সন্ধান করতে চান যাতে " আলকেমিস্ট " শব্দ রয়েছে । কোনও সূচী পৃষ্ঠা ছাড়া আপনার কাছে পুরো বই / অধ্যায়গুলির মাধ্যমে স্ক্যান করা ছাড়া অন্য কোনও বিকল্প নেই। যেমন: 1000 পৃষ্ঠা।

এই উপমাটি ডাটাবেস বিশ্বে "ফুল টেবিল স্ক্যান" নামে পরিচিত ।

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

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

তবে তারপরে, প্রকৃত 1000 পৃষ্ঠাগুলির পাশাপাশি সূচকগুলি দেখানোর জন্য আপনার আরও 10 ডলার পৃষ্ঠা প্রয়োজন হবে, সুতরাং সম্পূর্ণ 1010 পৃষ্ঠা।

সুতরাং, সূচকটি একটি পৃথক বিভাগ যা দক্ষ বর্ণনাকরণের জন্য সাজানো ক্রমে সূচকযুক্ত কলামে পয়েন্টারটির মানকে সঞ্চিত করে।

স্কুলগুলিতে জিনিসগুলি সহজ, তাই না? : P: P


23
সত্যিই দুর্দান্ত উপমা! মজার আমি কোনও বইয়ের সূচক এবং একটি ডিবি সূচকের মধ্যে সংযোগটি তৈরি করিনি
ইয়োলো ভো

2
এটি আমাকে ভাবতে বাধ্য করে Libraryবা Grocery Store আপনি কি মুদি দোকানে কোনও সূচক না রেখে ছবিটি রাখতে পারেন? Where's The Beef?!? Oh its next to the Restrooms, a mop, and makeup
জয়রিজো

3
"তবে শুরুতে একটি সূচী পৃষ্ঠার সাহায্যে আপনি সেখানে আছেন।" "আপনি সেখানে" মানে কি?
ফিসবেটেরিয়ান

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

1
আপনার ব্যাখ্যাটি গ্রহণ করা এত সহজ Other আমি আশা করি আমি একাধিক upvote দিতে পারে।
পান্না

239

আমি প্রথমবার এটি পড়েছি এটি আমার পক্ষে খুব সহায়ক হয়েছিল। ধন্যবাদ.

সেই থেকে আমি সূচী তৈরির ক্ষয়ক্ষতি সম্পর্কে কিছুটা অন্তর্দৃষ্টি অর্জন করেছি: আপনি যদি একটি সূচী দিয়ে একটি টেবিল ( UPDATEবা INSERT) লিখেন তবে ফাইল সিস্টেমে আপনার দুটি লেখার কাজ রয়েছে। টেবিলের ডেটার জন্য একটি এবং সূচক ডেটার জন্য আরেকটি (এবং এটির রিসর্টিং (এবং - যদি ক্লাস্টার করা হয় - টেবিলের ডেটা রিসর্ট করা))। যদি টেবিল এবং সূচক একই হার্ড ডিস্কে অবস্থিত হয় তবে এটির জন্য আরও বেশি সময় লাগে। সুতরাং একটি সূচী ছাড়াই একটি টেবিল (একটি গাদা) দ্রুত লেখার ক্রিয়াকলাপের অনুমতি দেয়। (যদি আপনার দুটি সূচক থাকে তবে আপনি তিনটি রাইটিং অপারেশন দিয়ে শেষ করতে পারেন ইত্যাদি)

যাইহোক, সূচক তথ্য এবং সারণী ডেটার জন্য দুটি পৃথক হার্ড ডিস্কে দুটি পৃথক অবস্থান নির্ধারণ করা সময়ের বর্ধিত ব্যয়ের সমস্যা হ্রাস / নির্মূল করতে পারে। এটির জন্য কাঙ্ক্ষিত হার্ড ডিস্কগুলিতে ফাইলগুলি সহ অতিরিক্ত ফাইল গ্রুপগুলির সংজ্ঞা এবং সারণী / সূচী অবস্থানের পছন্দসই সংজ্ঞা হিসাবে প্রয়োজন।

সূচিগুলির সাথে আর একটি সমস্যা হ'ল ডেটা isোকানো হওয়ায় সময়ের সাথে সাথে তাদের বিভাজন। REORGANIZEসাহায্য করে, আপনার এটি করতে রুটিন অবশ্যই লিখতে হবে।

কিছু নির্দিষ্ট পরিস্থিতিতে ইনডেক্স সহ একটি টেবিলের চেয়ে গাদা বেশি সহায়ক,

উদাহরণস্বরূপ: - আপনার কাছে প্রতিদ্বন্দ্বী প্রচুর লেখাগুলি থাকলে তবে প্রতিবেদনের জন্য ব্যবসায়িক সময়ের বাইরে কেবলমাত্র একটি রাত্রে পড়ুন।

এছাড়াও, ক্লাস্টারযুক্ত এবং নন-ক্লাস্টারযুক্ত সূচকগুলির মধ্যে একটি পার্থক্য বরং গুরুত্বপূর্ণ।

আমাকে সহায়তা করেছে: - ক্লাস্টারড এবং নন ক্লাস্টারড ইনডেক্স আসলে কী বোঝায়?


3
আমি মনে করি, এই সূচীকরণের সমস্যাগুলি মাস্টার এবং স্লেভের মতো দুটি পৃথক ডাটাবেস বজায় রেখে সমাধান করা যেতে পারে। যেখানে মাস্টার রেকর্ড সন্নিবেশ করা বা আপডেট করতে ব্যবহার করা যেতে পারে। ইনডেক্সিং ছাড়াই। এবং ক্রীতদাস সঠিক ইনডেক্সিং সহ পড়তে ব্যবহৃত হতে পারে ???
ভারতেশ

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

3
ইয়া ...! আমার মন্তব্য পড়ার চেষ্টা করুন এবং এটি সঠিকভাবে বুঝতে চেষ্টা করুন। আমি একই কথাটি বলেছি, আমি মাস্টার এবং স্লেভকে (যাই হোক না কেন) "দ্বিতীয় ডাটাবেসে এপিক্লিটিং বা মিররিং বলে উল্লেখ করেছি যার উপর বিশ্লেষণগুলি সেই ডাটাবেজ থেকে কাজটির বোঝা দূরে নিয়ে যাওয়ার জন্য গ্রহণ করে that দ্বিতীয় ডাটাবেসে ডেটা এবং সূচীগুলির অনুলিপি থাকবে সেই ডেটা "
ভারতেশ

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

230

একটি সূচক কেবলমাত্র একটি ডেটা কাঠামো যা ডেটাবেজে একটি নির্দিষ্ট কলামের জন্য অনুসন্ধান দ্রুত করে তোলে। এই কাঠামোটি সাধারণত একটি বি-ট্রি বা একটি হ্যাশ টেবিল হয় তবে এটি অন্য কোনও যুক্তিযুক্ত কাঠামো হতে পারে।


28
এই উত্তরের জন্য +1 গুণ এক মিলিয়ন, কারণ মূলত ইনডেক্সিংটি কী মূলত যা বোঝায় তার একটি সহজ ব্যাখ্যা খুঁজতে গিয়ে এই তালিকাটি পেয়েছি found
জোশ বার্সন

1
আসুন নোট করুন যে "মাত্র একটি ডেটা স্ট্রাকচার" এর অর্থ "ডেটাতে অতিরিক্ত" নয়। কিছু সময় এটি হয় (যেমন "নন-ক্লাস্টারড ইনডেক্স"), কিছু সময় এটি ডেটার বিন্যাস নির্ধারণ করে (যেমন "ক্লাস্টারড ইনডেক্স")।
পাবলো এইচ

159

এখন, আসুন আমরা বলি যে আমরা যে কোনও কর্মচারীর 'Abc' নামকরণ করা আছে তার সমস্ত বিশদ জানতে একটি অনুসন্ধান চালাতে চাই?

SELECT * FROM Employee 
WHERE Employee_Name = 'Abc'

একটি সূচক ছাড়া কি হবে?

ডাটাবেস সফ্টওয়্যারটি আক্ষরিক অর্থে কর্মী সারণীর প্রতিটি একক সারিতে দেখতে হবে যে এই সারির জন্য কর্মচারী_নাম 'অ্যাবসি' আছে কিনা। এবং, কারণ এর ভিতরে আমরা প্রতিটি সারি "Abc" চাই, আমরা কেবল একবার "Abc" নামের সাথে একটি সারি পেয়ে গেলে কেবল তাকানো থামাতে পারি না, কারণ Abc নামের আরও কয়েকটি সারি থাকতে পারে । সুতরাং, সর্বশেষ সারি পর্যন্ত প্রতিটি সারি অবশ্যই অনুসন্ধান করা উচিত - যার অর্থ এই দৃশ্যের হাজার হাজার সারি 'Abc' নামের সারিগুলি সন্ধান করতে ডাটাবেস দ্বারা পরীক্ষা করতে হবে। একে বলা হয় পুরো টেবিল স্ক্যান

কীভাবে একটি ডাটাবেস সূচক কর্মক্ষমতা সহায়তা করতে পারে

একটি সূচকের সম্পূর্ণ বিন্দুটি হ'ল অনুসন্ধান টেস্টগুলিকে গতিশীল করে প্রয়োজনীয় টেবিলে রেকর্ড / সারি সংখ্যা কেটে ফেলা উচিত। একটি সূচক একটি ডেটা স্ট্রাকচার (বেশিরভাগই একটি বি-ট্রি) যা একটি সারণীতে নির্দিষ্ট কলামের জন্য মানগুলি সংরক্ষণ করে।

বি-গাছ সূচক কীভাবে কাজ করে?

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

কিভাবে একটি হ্যাশ টেবিল সূচক কাজ করে?

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

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

একটি হ্যাশ সূচকের অসুবিধাগুলি

হ্যাশ টেবিলগুলি ডাটা স্ট্রাকচার অনুসারে বাছাই করা হয় না এবং এমন অনেক ধরণের প্রশ্ন রয়েছে যা হ্যাশ সূচকগুলি এমনকি সহায়তা করতে পারে না। উদাহরণস্বরূপ, ধরুন আপনি 40 বছরের কম বয়সী কর্মচারীদের সবাই খুঁজে বের করতে চান। আপনি কীভাবে এটি একটি হ্যাশ টেবিল সূচক দিয়ে করতে পারেন? হ্যাঁ, এটি সম্ভব নয় কারণ একটি হ্যাশ টেবিল কেবল মূল মান জোড়গুলি অনুসন্ধান করার জন্যই ভাল - যার অর্থ সম্যতার জন্য যাচাই করা প্রশ্নগুলি

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

কোনও ডাটাবেস কীভাবে জানতে পারে কখন কোন সূচক ব্যবহার করতে হয়? যখন "যেমন নির্বাচন থেকে কর্মচারী WHEE কর্মচারী_নাম = 'Abc" "এর মতো কোনও কোয়েরি চালানো হয়, তখন কলামে (গুলি) কোয়েডের কোন সূচি রয়েছে কিনা তা ডাটাবেস পরীক্ষা করবে। কর্মী_নাম কলামটি ধরে নিয়েছে যে এটিতে একটি সূচক তৈরি হয়েছে, ডাটাবেসটিকে সিদ্ধান্ত নিতে হবে যে অনুসন্ধানগুলি মূল্য অনুসন্ধান করার জন্য সূচীটি ব্যবহার করা আসলেই বোধগম্য কিনা - কারণ এমন কিছু পরিস্থিতি রয়েছে যেখানে এটি ডাটাবেস সূচকটি ব্যবহার করার পক্ষে কম দক্ষ , এবং পুরো টেবিলটি স্ক্যান করতে আরও দক্ষ।

ডাটাবেস সূচকের দাম কত?

এটি স্থান গ্রহণ করে - এবং আপনার টেবিলটি বৃহত্তর, আপনার সূচকটি বৃহত্তর। সূচকের সাথে আরও একটি কার্য সম্পাদন হ'ল এটি হ'ল যে আপনি যখনই সংশ্লিষ্ট সারণীতে সারি যুক্ত, মুছুন বা আপডেট করবেন তখন আপনার সূচকে একই ক্রিয়াকলাপ করতে হবে। মনে রাখবেন যে সূচীতে টেবিলে কলাম (গুলি) থাকে যা সূচকটি coversেকে দেয় তার মতো মিনিট ডেটা পর্যন্ত একই সূচি থাকা দরকার।

একটি সাধারণ নিয়ম হিসাবে, কেবলমাত্র একটি সূচকে কোনও টেবিলে তৈরি করা উচিত যদি সূচিযুক্ত কলামের ডেটা ঘন ঘন অনুসন্ধান করা হয়।

আরো দেখুন

  1. কোন কলামগুলি সাধারণত ভাল সূচকগুলি তৈরি করে?
  2. ডাটাবেস সূচকগুলি কীভাবে কাজ করে

4
"একটি ডাটাবেস সূচক অন্যান্য কলামগুলিতে মান সংরক্ষণ করে না" - সত্য নয়।
mustaccio

2
@ মুস্তাকসিও: সূচকগুলি কেবলমাত্র সূচিযুক্ত কলামগুলির সাথে সারি রেফারেন্স সঞ্চয় করে (যতদূর আমি জানি)। আমার ভুলও হতে পারে. আপনার কি এমন কোনও রেফারেন্স আছে যা সূচকগুলিতে অন্যান্য কলামের মানগুলিকে সঞ্চয় করে?
সোমনাথ মুলুক

3
@ টু ডাউনভোটার্স: আমি কী উন্নতি করতে পারি তা কি আপনি কেবল ব্যাখ্যা করতে পারেন?
সোমনাথ মুলুক

2
উদাহরণস্বরূপ এসকিউএল সার্ভার ক্লাস্টারিং সূচি বা ডিবি 2 এর CREATE INDEX ... INCLUDEধারাটি পরীক্ষা করুন। আপনার উত্তরটিতে আমার কাছে অনেকগুলি সাধারণীকরণ রয়েছে।
mustaccio

11
@ মুস্তাকসিও: সুতরাং ডিফল্টরূপে create indexঅন্যান্য কলামগুলি কেন অন্তর্ভুক্ত করে না এবং কেন এটি করা উচিত। If we did just store all the other columns in the index, then it would be just like creating another copy of the entire table, which would take up way too much space and would be very inefficient.। এটি সূচকের আরও সাধারণ সংস্করণ। CREATE INDEX ... INCLUDEঅন্যান্য কলামগুলি বিবেচনা করে এটি নতুন সংস্করণ। আমি যে পোস্টটি ব্যাখ্যা করেছি তা আরও সাধারণীকৃত সংস্করণ বিবেচনা করছে। যদি আমরা সমস্ত ডাটাবেস বিবেচনা করি তবে সূচির কাজগুলি কীভাবে একটি বই হবে? তাই না? আপনার কি মনে হয় উত্তরটি ডাউনটোটের যোগ্য?
সোমনাথ মুলুক

96

সাধারণ বর্ণনা!

সূচকটি কোনও ডাটা স্ট্রাকচার ছাড়া কিছুই নয় যা কোনও সারণীতে নির্দিষ্ট কলামের জন্য মানগুলি সঞ্চয় করে । একটি সূচী একটি টেবিলের কলামে তৈরি করা হয়।

উদাহরণ: আমরা নামক একটি ডাটাবেস টেবিল আছে Userতিনটি কলাম সহ - Name, Ageএবং Address। ধরে নিন যে Userটেবিলটিতে কয়েক হাজার সারি রয়েছে।

এখন, আসুন আমরা বলি যে 'জন' নামে পরিচিত যে কোনও ব্যবহারকারীর সমস্ত বিশদ জানতে আমরা একটি ক্যোয়ারী চালাতে চাই। আমরা যদি নিম্নলিখিত কোয়েরি চালাই:

SELECT * FROM User 
WHERE Name = 'John'

ডাটাবেস সফ্টওয়্যারটি আক্ষরিকভাবে Userটেবিলের প্রতিটি একক সারিতে দেখতে হবে Namerow সারিটির জন্য 'জন' কিনা তা দেখতে । এটি একটি দীর্ঘ সময় নিতে হবে।

এটিই indexআমাদের সহায়তা করে: তদন্ত করা প্রয়োজন এমন একটি সারণীতে রেকর্ডস / সারিগুলির সংখ্যা কেটে মূলত অনুসন্ধান অনুসন্ধানগুলিকে ত্বরান্বিত করতে সূচক ব্যবহার করা হয়

কীভাবে একটি সূচক তৈরি করবেন:

CREATE INDEX name_index
ON User (Name)

একটি indexনিয়ে গঠিত কলাম মান (যেমন: জন) এক টেবিল থেকে , এবং যারা মান একটি সংরক্ষিত হয় ডাটা স্ট্রাকচার

সুতরাং এখন ডাটাবেস জন নামক কর্মচারীদের সন্ধানের জন্য সূচকটি ব্যবহার করবে কারণ ব্যবহারকারীদের নাম অনুসারে সূচকটি বর্ণমালা অনুসারে বাছাই করা হবে। এবং, কারণ এটি বাছাই করা হয়েছে, এর অর্থ একটি নাম অনুসন্ধান করা অনেক দ্রুত কারণ কারণ "জে" দিয়ে শুরু হওয়া সমস্ত নাম সূচকে একে অপরের ঠিক পাশে থাকবে!


1
একটি সূচী কলামে অর্ডার বাছাই করে বোঝায় না
ওলিগোফ্রেন

4
ধন্যবাদ। এটি আমার বুঝতে সাহায্য করেছে। সুতরাং মূলত একটি সূচক হ'ল কলামের তথ্যের প্রতিরূপ যা সাজানো হয়েছে। সাধারণত কলামের ডেটা ঠিক োকানো হয় সেই ক্রমে থাকে।
নীল

34

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


6
এটি একটি মন্তব্য নয়, কোনও উত্তর নয়।
রন জন

5
এটি আরও বেশি দৃশ্যমান এবং এইভাবে এটি আরও সাধারণভাবে মন্তব্য হিসাবে আরও সহায়ক। কোন উত্তরটি এটিকে মন্তব্য হিসাবে যুক্ত করা উচিত ছিল?
pfabri

1
সম্ভবত
ওপিতে

33

একটি বইয়ের সূচি হিসাবে ডাটাবেস সূচীটি কেবল ভাবেন।

আপনার যদি কুকুর সম্পর্কে একটি বই রয়েছে এবং আপনি বলতে চাই যে জার্মান শেফার্ডস, আপনি অবশ্যই বইয়ের সমস্ত পৃষ্ঠাগুলি থেকে সন্ধান করতে পারেন এবং আপনি যা সন্ধান করছেন তা খুঁজে পেতে পারেন - তবে এটি অবশ্যই সময়সাপেক্ষ এবং না খুব দ্রুত.

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

ডাটাবেসে, পৃষ্ঠা নম্বরটি পয়েন্টার হিসাবে উল্লেখ করা হয় যা সত্তাটি অবস্থিত যেখানে ডিস্কের ঠিকানায় ডাটাবেসকে নির্দেশ দেয়। একই জার্মান শেফার্ড উপমা ব্যবহার করে আমাদের এমন কিছু থাকতে পারে ("জার্মান শেফার্ড", 0x77129) যেখানে 0x77129ডিস্কের ঠিকানা যেখানে জার্মান শেফার্ডের সারি ডেটা সংরক্ষণ করা হয়।

সংক্ষেপে, একটি সূচক একটি ডাটা স্ট্রাকচার যা কোনও সারণীতে একটি নির্দিষ্ট কলামের জন্য মানগুলি সংরক্ষণ করে যাতে কোয়েরি অনুসন্ধানের গতি বাড়ায়।

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