sql - রিলেশনাল ডাটাবেজ কি




ডাটাবেস সূচী কীভাবে কাজ করে? (6)

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

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


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

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

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

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

SELECT * FROM User 
WHERE Name = 'John'

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

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

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

CREATE INDEX name_index
ON User (Name)

একটি index একটি সারণী থেকে কলাম মান (উদাঃ জন) থাকে এবং সেই মানগুলি একটি ডেটা কাঠামোতে সংরক্ষণ করা হয়।

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


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

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

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

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

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

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

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

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


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


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

SELECT * FROM Employee 
WHERE Employee_Name = 'Abc'

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

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

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

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

বি-ট্রি ইনডেক্স কীভাবে কাজ করে?

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

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

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

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

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

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

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

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

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

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

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

আরো দেখুন

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

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

১০০ পৃষ্ঠাগুলির একটি "বুক" বিবেচনা করুন, প্রতিটি বিভাগে 100 পৃষ্ঠাগুলি দ্বারা বিভক্ত, প্রতিটি পৃষ্ঠার এক্স পৃষ্ঠা সহ।

সরল, হাহ?

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

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

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

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

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


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

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

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

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

সূচক কী?

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

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

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

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

Field name       Data type      Size on disk
id (Primary key) Unsigned INT   4 bytes
firstName        Char(50)       50 bytes
lastName         Char(50)       50 bytes
emailAddress     Char(100)      100 bytes

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

উদাহরণ 1 - অরসেটেড ক্ষেত্র বনাম সাজানো

আমাদের r = 5,000,000 ======================================================================================================================================================================================================================================================= টেবিলের ব্লকিং ফ্যাক্টরটি প্রতি ডিস্ক ব্লক bfr = (B/R) = 1024/204 = 5 রেকর্ড হবে। টেবিলটি ধারণ করতে মোট ব্লকের সংখ্যা হ'ল N = (r/bfr) = 5000000/5 = 1,000,000 ব্লক।

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

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

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

Field name       Data type      Size on disk
firstName        Char(50)       50 bytes
(record pointer) Special        4 bytes

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

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

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

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

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

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

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






database-indexes