মাইএসকিউএলে দুটি দ্বি-কলাম সূচক বনাম দুটি একক-কলাম সূচী?


113

আমি নিম্নলিখিত মুখোমুখি হয়েছি এবং আমি সেরা অনুশীলন কোনটি সম্পর্কে নিশ্চিত নই।

নিম্নলিখিত টেবিলটি বিবেচনা করুন (যা বড় হবে):

আইডি পিকে | giver_id এফকে | প্রাপক_আইডি এফকে | তারিখ

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

SELECT...WHERE giver_id = x AND recipient_id = t

এই জাতীয় প্রতিটি সংমিশ্রণটি টেবিলে অনন্য হবে।

এই কলামগুলির উপর একটি দ্বি-কলাম সূচী যুক্ত করার কোনও সুবিধা আছে, বা তত্ত্বের দুটি স্বতন্ত্র সূচকগুলি কি যথেষ্ট / একই হবে?


1
যদি দুটি কলামের সংমিশ্রণটি অনন্য হয়, আপনি অনন্য বৈশিষ্ট্যযুক্ত একটি দ্বি-কলাম সূচক তৈরি করতে পারেন যা কেবল আপনার প্রশ্নের গতি বাড়িয়ে তুলবে না তবে আপনার টেবিলের সাথে সামঞ্জস্যতা যুক্ত করবে।
sguven

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

@ ব্যবহারকারী 1585784 এ এক্সট্রাপোলেট করতে; যদি দুটি কলামের সংমিশ্রণটি অনন্য হয় তবে আমি মনে করি তাদের জন্য একটি অনন্য কী ব্যবহার করা উচিত। আসলে, যদি কেউ ডাটাবেস স্তরে স্বতন্ত্রতা প্রয়োগ করতে চায় তবে একটি অনন্য কী হ'ল সহজতম উপায় ...
এর্ক

উত্তর:


132

আপনার যদি দুটি একক কলাম সূচক হয় তবে সেগুলির মধ্যে একটিরই আপনার উদাহরণে ব্যবহৃত হবে।

আপনার যদি দুটি কলাম সহ একটি সূচক থাকে, তবে ক্যোয়ারীটি দ্রুত হতে পারে (আপনার পরিমাপ করা উচিত)। একটি দুটি কলাম সূচক একক কলাম সূচক হিসাবেও ব্যবহার করা যেতে পারে তবে কেবলমাত্র তালিকাভুক্ত কলামের জন্য।

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

সূচকগুলি নির্বাচন করার সময়, আপনাকে সন্নিবেশ করা, মুছতে এবং আপডেট করার ক্ষেত্রে প্রভাবটিও বিবেচনা করতে হবে। আরও সূচী = ধীর আপডেট।


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

33

একটি আচ্ছাদন সূচক:

ALTER TABLE your_table ADD INDEX (giver_id, recipient_id);

... এর অর্থ হ'ল কোনও ক্যোয়ারী উল্লেখ করা থাকলে এবং এবং এর giver_idসংমিশ্রণে সূচকটি ব্যবহার করা যেতে পারে । মনে রাখবেন যে সূচকের মানদণ্ডটি বামতম ভিত্তিতে রয়েছে - কেবলমাত্র উল্লেখ করা একটি কোয়েরি আমার সরবরাহিত বিবৃতিতে কভারিং সূচকটি ব্যবহার করতে সক্ষম হবে না।giver_idrecipient_idrecipient_id

অতিরিক্তভাবে, মাইএসকিউএল কেবল নির্বাচন প্রতি একটি সূচক ব্যবহার করতে পারে তাই একটি কভারিং সূচকটি আপনার প্রশ্নের অনুকূলিতকরণের সেরা উপায় হবে।


10
MySQL can only use one index per SELECTএটি আর সত্য নয়, আপনি নিজের উত্তরটি আপডেট করার জন্য সম্পাদনা করলে ভাল লাগবে।
Davor

প্রচ্ছদ সূচক কেন ব্যবহার করতে সক্ষম হবে না তা বোঝাতে আপনার আপত্তি হবে recipient_id?
ইভো পেরেইরা

2
মাইএসকিউএলে @ আইভোপিরির মাল্টিম কলাম সূচী আপনাকে সূচীতে বাম থেকে ডানে সমস্ত ক্ষেত্র ব্যবহার করতে দেয়। উদাহরণস্বরূপ, যদি আপনি একটি আছে INDEX (col1, col2, col3, col4)তারপর সূচক একটি সঙ্গে অনুসন্ধানের জন্য প্রয়োগ করা হবে WHEREমত দফা col1 = 'A'বা col1 = 'A' AND col2 = 'B'বা col1 = 'A' AND col2 ='B' AND col3 = 'C' AND col4 = 'D', কিন্তু এই বিশেষ সূচক মত কিছু জন্য ব্যবহার করা হবে না WHERE col2 = 'B'বা WHERE col3 = 'C' AND col4 = 'D'কারণ অনুসন্ধান ক্ষেত্র সূচক সংজ্ঞা সবচেয়ে না বামে হয়। এই ক্ষেত্রগুলি কভার করতে আপনাকে অতিরিক্ত সূচি যুক্ত করতে হবে।
স্লিকট্রিক

"নির্বাচিত প্রতি একটি সূচক" , এটি এখনও মারিয়্যাডবি 10.1 এর জন্য সত্য?
ওল্ডবয়

1
@ অ্যান্টনি: না। উপরের মন্তব্য দ্বারা মন্তব্য দেখুন।
কাপাড

4

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

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


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

2

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


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