কোনও ক্ষেত্রকে অনন্য করে কী তা সূচকে পরিণত করে?


10

আমি যদি uniqueকোনও ক্ষেত্রের প্রতিবন্ধকতা সৃষ্টি করি, তবে স্কেলযোগ্য inোকানোর সময় পাওয়ার জন্য আমারও কি সেই ক্ষেত্রটিতে একটি সূচক তৈরি করতে হবে? বা এটি কি আমার জন্য করা হয়েছে (এটি ব্যবহার করা সূচকটি সর্বজনীনভাবে অ্যাক্সেসযোগ্য নয়?)

বিশেষত, আমি প্রোটোটাইপিংয়ের জন্য অ্যাপাচি ডার্বির সাথে কাজ করছি, যদিও আমি সম্ভবত এটি অর্ধ-নিকট ভবিষ্যতে মাইএসকিউএল এ স্থানান্তর করব। আমি আরও আশা করছি যে এসকিউএল স্ট্যান্ডার্ডে কিছু থাকতে পারে যা এ সম্পর্কে কিছু বলে।

এই ক্ষেত্রটি দ্বারা অনুসন্ধান করার জন্য আমার কখনই প্রয়োজন হবে না, তাই আমি বরং অকেজো সূচক তৈরি করব না। তবে rather O(n)োকানোর সময় না দিয়ে বরং আমার কাছে অকেজো সূচি থাকতে হবে ।


2
আমি যা জানি তা থেকে অনন্য সূচি ব্যবহারের পিছনে একটি অনন্য বাধা কার্যকর করা হয়। আপনি এই প্রশ্নে এই পরিস্থিতি সম্পর্কিত কিছু মতামত দেখতে পাবেন: অনন্য সূচকের পরিবর্তে অনন্য বাধা কখন ব্যবহার করবেন?
মারিয়ান

@ লিঙ্কটির জন্য সামান্য ধন্যবাদ এটা খুব অন্তর্দৃষ্টিযুক্ত ছিল।
কর্সিকা

উত্তর:


2

--EDIT--

আমার আসল উত্তর (নীচে) সম্ভবত আপনার পক্ষে মোটেই কার্যকর নয় কারণ এটি uniqueসীমাবদ্ধতার প্রশ্নটির সমাধান করে না । অন্যরা যেমন বলেছে, এই সীমাবদ্ধতাগুলি সাধারণত একটি অনিচ্ছাকৃত অনন্য সূচক দিয়ে প্রয়োগ করা হয়। বিশেষ ক্ষেত্রে এটি সত্য নাও হতে পারে (যেমন disable novalidateওরাকল এর জন্য)।

প্রশ্ন হতে পারে: একটি সূচক ছাড়া স্বতন্ত্রতা প্রয়োগ করা সম্ভব? সাধারণত উত্তরটি বলার অপেক্ষা রাখে না যদিও কোনও কোনও ক্ষেত্রে ক্লাস্টারড ইনডেক্সের অর্থ হ'ল সূচক এবং সারণী একই জিনিস।

- শেষ সম্পাদনা -

আপনি বলেছিলেন "ও (এন) সন্নিবেশের সময় চেয়ে আমার অপ্রয়োজনীয় সূচক থাকতে হবে।" তবে সাধারণ ডাটাবেসে ও (এন) inোকানোর সময় থাকে না। বিবেচনা দুটি মামলা আছে:

  1. সূচকযুক্ত বা ছাড়াই একটি সাধারণ টেবিল:

    নতুন সারিগুলি স্তূপের শীর্ষে ফেলে দেওয়া হয়। আরডিবিএমএস সম্ভবত কেবলমাত্র 1 টি ব্লকের দিকে দেখায় , তাই কেবল ও (1) নয় খুব ছোট ও (1)।

    যদি সারণিতে সূচি থাকে তবে সারিটিতে একটি পয়েন্টার যুক্ত হবে। এটি সাধারণত একটি ও (লগ (এন)) অপারেশন হবে।

  2. এক ধরণের ক্লাস্টারিং সহ একটি টেবিল, যেমন একটি সূচক সংগঠিত টেবিল বা ওরাকেলের ক্লাস্টার , বা এসকিউএল সার্ভার এবং অন্যদের জন্য একটি ক্লাস্টারড সূচক :

    নতুন সারিগুলি একটি নির্দিষ্ট ব্লকে সন্নিবেশ করা হয়, যা ব্লকটি বিভক্ত বা ওভারফ্লো হতে পারে, তবে যাই ঘটুক না কেন এটি O (লগ (এন)) বা আরও ভাল , বি-ট্রি বা অনুরূপ কাঠামো দ্বারা ব্লকটি অনুসন্ধানের জন্য ব্যবহৃত হয়।


O(n)আপনি পুরো টেবিলটি যাচাই করতে হবে তবে একটি সূচক ছাড়া স্বতন্ত্রতা হবে । এটাই আমি এড়াতে চাইছি।
কর্সিকা

এটি প্রকৃতপক্ষে এই প্রশ্নের সেরা উত্তর !!! +1
রোল্যান্ডোমাইএসকিউএলডিবিএ

@ ট্রিক - হ্যাঁ, আমি প্রথমে ভুল বুঝেছিলাম। সূচক হ'ল দামের স্বতন্ত্রতার প্রতিবন্ধকতার জন্য আপনি যে মূল্য দেন। আপনি কি আপনার ক্ষেত্রে ক্লাস্টারড ইনডেক্স ব্যবহার করতে পারেন?
জ্যাক বলছেন topanswers.xyz

1
@ জ্যাকপিডুগলস আমি একটি স্ট্যান্ডার্ড "সূচক" ব্যবহার করতে এবং একটি O(lg n)সন্নিবেশের সময় পেতে পারি । এটা কোন সমস্যা না. আমার প্রশ্নটি হল সিস্টেমটি, এটা জেনেও যে আপনার একটি সূক্ষ্ম সন্নিবেশের সময় পাওয়ার জন্য সেই সূচকটি প্রয়োজন, আমার জন্য একটি সূচক তৈরি করুন।
কর্সিকা

2

প্রাথমিক কী> = অনন্য> = আইএনডিএক্স == কে

ইনোডিবি ডেটা পিকে দ্বারা অর্ডার করা হয়। মাইআইএসএএম পিকে ইউনিকের মতোই কাজ করে।

INSERT অবশ্যই আপনার প্রতিটি সূচকে (যে কোনও ধরণের) একটি "সারি" যুক্ত করতে হবে। এটি কিছুটা সময় নেয়। (সাধারণত বিষয়টি যথেষ্ট পর্যাপ্ত থাকে না)) সূচীগুলি সবগুলি বিটিআর ফর্ম্যাটে সংরক্ষণ করা হয়। মাইআইএসএএম বিটি ট্রিগুলি 1KB; InnoDB 16KB ব্যবহার করে।

ইনোডিবিতে প্রবেশ করানো এক সাথে পিকে এবং ডেটা আপডেট করে।

মাইআইএসএমে intoোকানো সাধারণত। এমওয়াইডি-তে ডেটা "সংযোজন" করে। পৃথকভাবে, এটি পিকে (যদি থাকে তবে) একটি সারি যুক্ত করে।

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


আপনার কী InnoDB স্পেসে একটি উদ্ধৃতি দেওয়া আছে যা জানিয়েছে যে কোনও UNIQUEসীমাবদ্ধতা ব্যবহারকারীকে কোনওটি তৈরি করা নির্দিষ্ট করে না দিয়ে একটি সূচক তৈরি করবে?
কর্সিকা

হুমমম ... না, কয়েক বছরের অভিজ্ঞতা আছে।
রিক জেমস

এবং এটি পরীক্ষা করার একটি উপায় এখানে ... কোনও গৌণ সূচক ছাড়াই একটি টেবিল তৈরি করুন; টেবিল স্থিতি প্রদর্শন করুন - সূচি_ দৈর্ঘ্য 0 হবে। তারপরে একটি অনন্য সূচক যুক্ত করুন; টেবিল পরিস্থিতি এখন কিছু দেখাবে। (টেবিলে একটি তুচ্ছ পরিমাণের ডেটা রাখতে হতে পারে))
রিক জেমস

1

সাহসের সাথে প্রশ্নের উত্তরের জন্য: হ্যাঁ, কোনও ক্ষেত্রটিকে অনন্য করে তুলতে এটির প্রাথমিক কী পছন্দ করে। প্রকৃতপক্ষে, আমি এটিকে অন্য অনন্য (প্রার্থী) কী থেকে আলাদা করার জন্য প্রাথমিক কীগুলির নিজস্ব নাম থাকার বিষয়ে অন্য একটি প্রশ্নে এটি আলোচনা করেছি ।

সীমাবদ্ধতার জন্য, সূচিগুলি আপনার জন্য তৈরি করা হয় যাতে সীমাবদ্ধতার দৃষ্টান্তটি সেট আপ হয়। আপনি অনুলিপি সূচকগুলি, এমনকি স্বতন্ত্র কীগুলি মুছে ফেলতে সক্ষম হবেন যতক্ষণ না আপনি যে সীমাবদ্ধতা তৈরি করেছিলেন তা সীমাবদ্ধতার দৃষ্টান্ত ব্যতীত ব্যক্তিগতভাবে তৈরি অন্যান্য অনন্য কীগুলি উল্লেখ না করে।

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

অনন্য সূচকটি কেবল টেবিলের প্রতিটি সারিতে টিউপসগুলির (স্বতন্ত্র, জোড়া, ট্রিপল, ..., এন-টিপলস, ইত্যাদি) স্বতন্ত্রতার গ্যারান্টি দেয়।

এই জাতীয় সদৃশ সূচকগুলি মুছে ফেলা আপনার বিবেচনার ভিত্তিতে, আপনি যদি টেবিলটি সরিয়ে নিতে চান তবে সীমাবদ্ধতার দৃষ্টান্তটি ভঙ্গ করবেন না।


1
এটি আমার প্রশ্নের উত্তর দেয় না। আমার প্রশ্ন সন্নিবেশ সময় সম্পর্কিত। আপনার যদি একটি অনন্য বাধা থাকে তবে সিস্টেমটি অবশ্যই sertোকানোর আগে ক্ষেত্রটির স্বতন্ত্রতা নিশ্চিত করতে হবে - যদি ক্ষেত্রের কোনও সূচি না থাকে তবে এটি পুরো টেবিলটি অনুসন্ধান করতে হবে ( O(n))। যদি কোনও সূচক থাকে, তবে অনুসন্ধানটি আরও দ্রুত হবে (সম্ভবত O(lg n))। এটাই আমার সমস্যা। আমি রেফারেন্সিয়াল অখণ্ডতা মেকানিক্স সম্পর্কে ভালভাবে অবগত, আমি কেবল পারফরম্যান্স সম্পর্কে উদ্বিগ্ন (এই প্রশ্নের উদ্দেশ্যে)।
কর্সিকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.