ওরাকল-এ কী বিদেশী কীতে সূচি তৈরি করা দরকার?


120

আমি একটা টেবিল আছে Aএবং একটি টেবিল BAকরার জন্য একটি বিদেশী কী হয়েছে Bউপর B, 'গুলি প্রাথমিক কী B_ID

কিছু কারণে (আমি জানি বৈধ কারণ আছে) যখন আমি কীতে এই দুটি টেবিলগুলিতে যোগদান করি তখন এটি কোনও সূচক ব্যবহার করে না।

আমার কি আলাদাভাবে একটি সূচি তৈরি করতে হবে A.B_IDবা কোনও বিদেশী কী এর অস্তিত্বের বিষয়টি সরবরাহ করা উচিত?

উত্তর:


136

বিদেশী কী বাধা একা ওরাকলে সূচি সরবরাহ করে না - একটি অবশ্যই তৈরি করা উচিত (এবং হওয়া উচিত)।


11
কিছু একটি বিদেশী কী বাধ্যতা তৈরি ডাটাবেস এছাড়াও একটি সূচক ... অর্থাত জেট ইঞ্জিন (MSAccess ফাইল, Firebird এবং মাইএসকিউএল) সৃষ্টি
Bubi

17
কোনও নির্দিষ্ট ডাটাবেস বাস্তবায়নের বিষয়ে স্পষ্টভাবে উল্লেখ না করে এই উত্তরটি অর্থহীন। নিশ্চিতভাবেই প্রশ্ন ট্যাগ করা আছে oracleতবে গুগল অনুসন্ধান থেকে আপনি এখানে অবতরণ করার পরে তা তাত্ক্ষণিকভাবে স্পষ্ট নয়।
developerbmw

5
আমি নিশ্চিত করতে পারি যে PostgreSQL - কমপক্ষে এই পোস্টের সময়ে - এটি স্বয়ংক্রিয়ভাবে করে না।
ডেমবিনস্কি

যতদূর আমি জানি এসকিউএল সার্ভারের জন্য একই উত্তর (২০১,, আজুর ...)।
প্যাক0

কেন একজনকে অবশ্যই ওরাকল দিয়ে একটি বিদেশী কীতে একটি সূচক তৈরি করতে হবে? দয়া করে এটি না করার পরিণতিগুলি কী?
Đỗ কং বং

46

বিদেশী কী তৈরি করা A.B_ID- এ স্বয়ংক্রিয়ভাবে একটি সূচক তৈরি করে না। সুতরাং এটি সাধারণত A.B_ID- এ পৃথক সূচক তৈরির জন্য ক্যোয়ারি পারফরম্যান্সের দৃষ্টিভঙ্গি থেকে বোঝা যায়।

আপনি যদি কখনও বিতে সারিগুলি মুছুন, আপনি অবশ্যই A.B_ID সূচকেড করতে চান। অন্যথায়, অনাথ রেকর্ড নেই কিনা তা নিশ্চিত করার জন্য প্রতিবার বি থেকে একটি সারি মুছে ফেলার জন্য অরাকলকে এ-তে একটি পূর্ণ টেবিল স্ক্যান করতে হবে (ওরাকল সংস্করণের উপর নির্ভর করে অতিরিক্ত লকিংয়ের প্রভাবও থাকতে পারে, তবে সেগুলি হ্রাস পাচ্ছে) আরও সাম্প্রতিক ওরাকল সংস্করণগুলিতে)।


1
পিএফকে কলামগুলি সম্পর্কে কী? উদাহরণস্বরূপ, যদি আমার কাছে বহু-বহু সম্পর্কের মধ্যবর্তী টেবিল থাকে তবে কি আমি এই টেবিলের দুটি পিএফকে কলামের জন্য একটি সূচক তৈরি করব?
ক্লামারী

3
@ ক্লামারী - সি এর প্রাথমিক কী (এ_আইডি, বি_আইডি) থাকলে প্রাথমিক কীটি এ থেকে মুছতে সক্ষম হওয়ার যত্ন নেবে যদি আপনিও বি থেকে দক্ষতার সাথে মুছতে সক্ষম হতে চান তবে আপনি একটি সূচক চান B_ID
জাস্টিন গুহ

25

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

সবচেয়ে সময়, আপনি একটি সূচক তৈরি করতে চাইবেন (আসলে, ওরাকল এপেক্সে "আনইনডেক্সড বিদেশী কীগুলির" একটি প্রতিবেদন আছে)।

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

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


14

এসকিউএল সার্ভার কখনই বিদেশী কী কলামগুলিতে স্বয়ংক্রিয়ভাবে সূচি রাখেনি - কিম ট্রিপ-এর দুর্দান্ত ব্লগ পোস্টটিকে এই শহুরে পৌরাণিক কাহিনীর পটভূমি এবং ইতিহাস দেখুন।

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


8

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

কিন্তু

কিছু ডাটাবেস রয়েছে যা ইতিমধ্যে স্বয়ংক্রিয়ভাবে বিদেশী কীগুলিতে সূচি তৈরি করে। জেট ইঞ্জিন (মাইক্রোসফ্ট অ্যাক্সেস ফাইল) ফায়ার বার্ড মাইএসকিউএল

সুরক্ষার জন্য

এসকিউএল সার্ভার ওরাকল

না


3
উল্লেখ করার জন্য Thx যে FIrebird এসকিউএল এটি স্বয়ংক্রিয়ভাবে করে। ঠিক সেই পয়েন্টটিই আমি খুঁজছিলাম।
ব্যবহারকারী424855

1

কর্মক্ষমতা সম্পর্কিত যে কোনও কিছুর মতোই এটি অনেকগুলি বিষয়ের উপর নির্ভর করে এবং কোনও সিলভ বুলেট নেই যেমন খুব উচ্চ ক্রিয়াকলাপযুক্ত পরিবেশে একটি সূচকের রক্ষণাবেক্ষণ গ্রহণযোগ্য নয়।

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


1

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



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