মাইএসকিউএল সূচী বিদেশী কী কলামগুলি স্বয়ংক্রিয়ভাবে চলে?


261

মাইএসকিউএল সূচী বিদেশী কী কলামগুলি স্বয়ংক্রিয়ভাবে চলে?

উত্তর:


229

হ্যাঁ, তবে কেবল । ইনোডব বর্তমানে একমাত্র শিপড টেবিল ফর্ম্যাট যা বিদেশী কীগুলি প্রয়োগ করা হয়েছে।


1
আপনার কি বিশ্বাস করার কোনও যুক্তি আছে যে মাইএসকিউএল কখনও অন্য কোনও টেবিল প্রকারের জন্য অ-সূচিযুক্ত কলামগুলিতে বিদেশী কীগুলি অনুমতি দেবে?
রবার্ট গাম্বল

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

স্পষ্টতই এটি সত্য নয়। আমার কাছে একটি বড় টেবিল (1 মিলিয়ন রেকর্ডস) এবং গণনা (*) যেখানে ফকি =? 15 সেকেন্ড লাগবে। ফকি কলামে একটি সূচক যুক্ত হয়েছে এবং জিনিসগুলি এখন এক সেকেন্ডের অধীনে চলেছে।
AbiusX

অন্য টেবিলে এবং একই মিলিয়ন রেকর্ড একই পরীক্ষা। এটি of MySQL 5.1 InnoDB। সারণীতে তিনটি ক্ষেত্র রয়েছে, একটি প্রাথমিক কী পূর্ণসংখ্যা, অন্যটি ইতিমধ্যে সূচকযুক্ত। তৃতীয়টি ছিল অন্য টেবিলের প্রাথমিক কীতে একটি বিদেশী কী। সুস্পষ্ট সূচীটি যোগ না করে এখানে অনুসন্ধানগুলি কয়েক সেকেন্ড সময় নিয়েছিল। সারণী থেকে সূচকগুলিও এতে কোনও সূচক দেখায় না।
AbiusX

@ অবিয়াসএক্স 5.1 সম্ভবত খুব পুরানো, নীচে মিঃ অ্যালেক্সান্দারের উত্তর দেখুন।
e2-e4

131

দৃশ্যত একটি সূচক স্বয়ংক্রিয়ভাবে উল্লিখিত তৈরি করা হয় লিংক রবার্ট পোস্ট করেছে

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

InnoDB এবং বিদেশী কী বাধা


9
দস্তাবেজ থেকে প্রমাণ সরবরাহ হিসাবে নির্বাচিত জবাব চেয়ে +1 আরও ভাল উত্তর
Gaz_Edge

6
উদ্ধৃত পাঠ্যটি আর মাইএসকিউএল ডক্সে অন্তর্ভুক্ত বলে মনে হয় না, এটি এখনও সত্য কিনা না তা অস্পষ্ট করে তোলে।
কোর্টনি মাইলস

7
@ ব্যবহারকারী2045006 আপনি নিখুঁত উদ্ধৃত পাঠ্যের জন্য ডকুম 5.0 পাশাপাশি 5.5 ডকটিও উল্লেখ করতে পারেন
শিখুন

1
বর্তমান দস্তাবেজে, পাঠ্যে কিছুটা পরিবর্তন হয়েছে (আমি ধরে নিচ্ছি অর্থটি একই রকম):InnoDB permits a foreign key to reference any index column or group of columns. However, in the referenced table, there must be an index where the referenced columns are the first columns in the same order.
লুকাশ বাস্কেরোটো

20

4
এই উত্তরটি কেন কোনও উত্তর সম্ভবত কোনও সম্ভাব্য উত্তরের লিঙ্কের অন্তর্ভুক্ত না হওয়ার একটি দুর্দান্ত উদাহরণ। এই মুহুর্তে, লিঙ্কযুক্ত পৃষ্ঠাটি প্রশ্নের কোনও উত্তর দেয় না।
মাইক

1
দয়া করে কেবল একটি লিঙ্ক পোস্ট করার পরিবর্তে উত্তরে সমস্ত তথ্য যুক্ত করুন
নিকো হায়েস

11

তুমি স্বয়ংক্রিয়ভাবে যদি আপনি একটি ALTER সারণী (পরিবর্তে সারণি তৈরি) না সূচক পেতে পারি, অন্তত অনুযায়ী ডক্স (লিঙ্ক 5.1 জন্য কিন্তু এটা 5.5 জন্য একই):

[...] আপনি যখন টেবিলের বিকল্প টেবিলে কোনও বিদেশী কী বাধা যুক্ত করেন, প্রথমে প্রয়োজনীয় সূচকগুলি তৈরি করতে ভুলবেন না।


2
আমি মাইএসকিউএল 5.6 এবং মারিয়াডিবি 10 এবং অলটার টেবিলেও একটি সূচী তৈরি করলাম। এটি আকর্ষণীয় যে মাইএসকিএলআইন্ডেক্সচেক সেই সূচকটিকে "রিডানড্যান্ট সূচক" হিসাবে প্রতিবেদন করেছে। আমি এটিকে ফেলে দেওয়ার চেষ্টা করেছি তবে আমি নিম্নলিখিত ত্রুটিটি পেয়েছি: "ERROR 1553 (HY000): সূচক 'সূচি_নাম' ছাড়তে পারে না: বিদেশী কী বাধার জন্য প্রয়োজন"। সুতরাং, সেই সূচকটি ফেলে দেওয়া এবং বিদেশী কী রাখা সম্ভব নয়।
সিপরিয়ান স্টোইকা

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

7

যারা 5.7 ডক্স থেকে উদ্ধৃতি খুঁজছেন তাদের জন্য :

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


4

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


আপনি সম্মিলিত কী সূচী সম্পর্কে একটি ভাল পয়েন্ট আনেন; তবে, নতুন তৈরি যৌগিক কী সূচকটি বিদেশী কী চেকগুলি দ্রুত তৈরি করার বাধ্যবাধকতাটি মেনে নিলে মাইএসকিউএল স্বয়ংক্রিয়ভাবে / নিঃশব্দে একটি স্বয়ংক্রিয় উত্পন্ন একক কী সূচকটি ফেলে দেবে। সত্যি কথা বলতে কি, এমএস এসকিউএল, ডিবি 2 এবং অন্যরা কেন এটি করে না তা আমার কোনও ধারণা নেই। তাদের অজুহাত সামান্য। বিদেশী কীগুলিতে একটি স্বয়ংক্রিয় উত্পন্ন সূচকটি ক্ষতিকারক হবে এমন কোনও ব্যবহারের ক্ষেত্রে আমি ভাবতে পারি না।
বিএমইনার 22'19

2

হ্যাঁ, এটি Innodbসরবরাহ করুন। আপনি FOREIGN KEYক্লজটির পরে একটি বিদেশী কী নাম রাখতে পারেন বা মাইএসকিউএলকে আপনার জন্য একটি নাম তৈরি করতে দিতে ছেড়ে দিতে পারেন। মাইএসকিউএল foreign_key_nameনাম সহ স্বয়ংক্রিয়ভাবে একটি সূচক তৈরি করে ।

CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name (columns)
REFERENCES parent_table(columns)
ON DELETE action
ON UPDATE action

0

হ্যাঁ, আপনি যখন অন্য একটিতে বিদেশী কী আছে এমন একটি টেবিল তৈরি করেন তখন মাইএসকিএল সূচকের বিদেশী কী স্বয়ংক্রিয়ভাবে থাকে।


-2

সূচীর কীটি স্বয়ংক্রিয়ভাবে ব্যবহার করা সম্ভব নয়

ALTER TABLE (NAME OF THE TABLE) ADD INDEX (FOREIGN KEY)

আপনি উদাহরণস্বরূপ ফটোগ্রাফ এবং বিদেশী কী জন্য সারণীটির নাম photograph_id। কোডটি এ জাতীয় হওয়া উচিত

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