মাইএসকিউএলে আইএনডিএক্স, প্রাইমারী, ইউনিক, ফুলটেক্সট এর মধ্যে পার্থক্য?


610

মাইএসকিউএল টেবিল তৈরি করার সময় প্রাইমারি, ইউনিক, আইএনডিএক্স এবং ফুলটেক্সটের মধ্যে পার্থক্যগুলি কী?

আমি তাদের কীভাবে ব্যবহার করব?



পাইথনের মাধ্যমিক সূচকের সাথে প্রাথমিকের তুলনা করার জন্য এই পোস্টটি দেখুন stackoverflow.com/questions/59918440/secondary-index-in-python
অ্যাথানাসিয়াস

উত্তর:


674

পার্থক্য

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

  • অনন্য একটি সূচককে বোঝায় যেখানে সূচকের সমস্ত সারি অনন্য হতে হবে। এটি হ'ল, একই সারিতে এই সূচীতে সমস্ত কলামের জন্য অন্য সারি হিসাবে অভিন্ন নন-নুল মান থাকতে পারে না। পাশাপাশি নির্দিষ্ট রেকর্ডের সীমাতে পৌঁছানোর জন্য অনন্য সূচিগুলি ব্যবহার করা যেতে পারে ডেটাগুলিতে সংযোজন প্রয়োগ করতে, কারণ ডাটা সন্নিবেশ করানো বা আপডেট করার সময় ডাটাবেস সিস্টেম পৃথক মান নিয়ম ভাঙতে দেয় না।

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

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

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

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

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

মিল

  • এই সমস্ত সূচকে তাদের একাধিক কলাম থাকতে পারে।

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


2
আপনি যদি আপনার প্রশ্নের মধ্যে ম্যাচ () / পুনরায় () ব্যবহার না করেন তবে এর অর্থ কি পুরো ফুল সূচকটি মূলত অকেজো এবং স্থানের কোমর?
ব্যবহারকারী 1397417

5
হ্যাঁ. এটি শুধুমাত্র মাইএসএমএল-তে মাইআইএসএএম ডাটাবেসের জন্য ব্যবহৃত হয়, ইনোডিবি নয়। অন্যান্য ডাটাবেস সার্ভারগুলিতে সমতুল্য বৈশিষ্ট্য থাকতে পারে যা ভিন্নভাবে কাজ করতে পারে।
থোমাসরুটটার

"এটি এমন কোনও কলামে ব্যবহার করা উচিত নয় যা নুল মানগুলিকে মঞ্জুরি দেয়" -> এটি "ব্যবহার করা যায় না" হওয়া উচিত। প্রাথমিক কীগুলি অগত্যা NOT NULL। মাইএসকিউএল রিপোর্ট করবে show columnsযে অন্য কোনও প্রাথমিক কী সংজ্ঞায়িত না হলে একটি নন-নুল অনন্য কী একটি প্রাথমিক কী।
গর্ডন লিনফ

1
এখানে যুক্তিটি হ'ল NULL কে নিজের সমান বলে মনে করা হয় না .. আমি এটা ভুলব না
হোস বুধ

2
@thomasrutter মাইএসকিউএল সংস্করণ 5.6 থেকে InnoDB মধ্যে এ পূর্ণ টেক্সট সমর্থনকারী
Marek Skiba

151

এগুলি সব ধরণের সূচক।

প্রাথমিক: অবশ্যই অনন্য হতে হবে, একটি সূচক হতে পারে (সম্ভবত) দৈহিক সূচী প্রতি টেবিলে কেবল একটি হতে পারে।

অনন্য: যেমনটি বলে। এই মানের টিপল সহ আপনার একাধিক সারি থাকতে পারে না। নোট করুন যেহেতু একটি অনন্য কী একাধিক কলামের বেশি হতে পারে, এর অর্থ এই নয় যে সূচকের প্রতিটি পৃথক কলাম অনন্য is তবে এই কলামগুলিতে প্রতিটি মানের সমন্বয় অনন্য।

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

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


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

19

আমি মনে করি এটি ভালভাবে কভার করা হয়েছে, নিম্নলিখিতগুলি বাদে সম্ভবত:

  • সরল KEY/ INDEX(বা অন্যথায় বলা হয় SECONDARY INDEX) কর্মক্ষমতা বাড়ায় যদি চূড়ান্ততা যথেষ্ট হয়। এই বিষয়ে, সাধারণ সুপারিশটি হ'ল যদি ফলাফল নির্ধারিত ফলাফলের রেকর্ডগুলির পরিমাণ যদি মূল সূচিপত্রের মোট রেকর্ডের 20% ছাড়িয়ে যায় তবে সূচকটি অকার্যকর হবে ff অনুশীলনে প্রতিটি স্থাপত্য পৃথক হবে তবে, ধারণাটি এখনও সঠিক।

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

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

  • আপনি কেবল ব্যবহার করতে পারেন FULLTEXT(বা অন্যথায় ডাকা হয়)SEARCH INDEX ইনোডব (মাইএসকিউএল 5.6.4 এবং উপরে) এবং মাইসাম ইঞ্জিনগুলির সাথে )

  • আপনি শুধুমাত্র ব্যবহার করতে পারেন FULLTEXTউপর CHAR, VARCHARএবং TEXTকলাম ধরনের
  • FULLTEXTসূচক কেবল একটি সূচক তৈরির চেয়ে অনেক বেশি জড়িত। এখানে বেশ কয়েকটি সিস্টেম সারণী তৈরি করা হয়েছে, সম্পূর্ণ পৃথক ক্যাচিং সিস্টেম এবং কিছু নির্দিষ্ট নিয়ম এবং অনুকূলিতকরণ প্রয়োগ করা হয়েছে। দেখুন http://dev.mysql.com/doc/refman/5.7/en/fulltext-restrictions.html এবং http://dev.mysql.com/doc/refman/5.7/en/innodb-fulltext-index.html
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.