স্কয়ার প্রাথমিক কী এবং সূচক


106

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

আমি জিজ্ঞাসার কারণটি হ'ল এমএস এসকিউএল সার্ভারে আমি এই আইডিতে একটি সূচক তৈরি করতে পারি, যা আমি বলেছি আমার প্রাথমিক কী।

সম্পাদনা করুন: একটি অতিরিক্ত প্রশ্ন - এটি প্রাথমিক কীটি সূচী করতে কোনও ক্ষতি করবে?

উত্তর:


72

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

অতিরিক্ত সূচক কোনও ভাল করে না, তবে কেবলমাত্র ক্ষতি (খুব ছোট) অতিরিক্ত ফাইলের আকার এবং সারি-তৈরি ওভারহেড।


39
অব্যবহৃত সূচীর ক্ষতি প্রকৃতপক্ষে খুব ক্ষতিকারক। একটি জিনিস জন্য, সূচকগুলি স্টোরেজ খায়। অন্য একটি জিনিসের জন্য, এটি লেখাগুলি এবং আপডেটগুলি ধীর করে দেয়। সর্বদা ব্যবহৃত সূচিগুলি মুছুন যা ব্যবহার করা হচ্ছে না।
পেসারিয়ার

50

অন্য প্রত্যেকে ইতিমধ্যে বলেছে, প্রাথমিক কীগুলি স্বয়ংক্রিয়ভাবে সূচকযুক্ত হয়।

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

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

CREATE NONCLUSTERED INDEX MyIndex
ON MyTable(ID)
INCLUDE (Name, Address)

সুতরাং, আপনি যখন এই প্রশ্নটি ব্যবহার করবেন:

SELECT ID, Name, Address FROM MyTable WHERE ID > 1000

এসকিউএল সার্ভার কেবলমাত্র আপনার তৈরি সূচকটি ব্যবহার করে ফলাফল দেবে এবং এটি প্রকৃত সারণী থেকে কিছুই পড়বে না।


28

দ্রষ্টব্য: এই উত্তরটি বৃহত্তর- এন্টারপ্রাইজ-শ্রেণীর বিকাশকে সম্বোধন করে ।

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

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

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

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

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


কীটি যদি কোন অন্তর্নিহিত বা বিগিন্ট স্বতঃসংশোধনের কী হয়? এসকিউএল সার্ভার কি এই ক্ষেত্রে অনন্য সূচক স্ক্যান না করার পক্ষে যথেষ্ট স্মার্ট?
কুইলব্রেকার

1
@ কুইলব্রেকার: কোনও IDENTITYক্ষেত্রটি অনন্য হওয়ার গ্যারান্টিযুক্ত নয়। সর্বোপরি, ব্যবহারকারীরা যদি ব্যবহারকারী হন তবে সদৃশ মান canোকাতে পারেন IDENTITY_INSERT

আমি জানি এটি একটি প্রাচীন বিষয়, তবে আমি বুঝতে পারি না যে কোনও একটি সূচকের স্বতন্ত্রতা স্ক্যানটি সিস্টেমে কীভাবে এই ধরনের বোঝা হতে পারে। একটি বি + ট্রি স্ক্যান হ'ল ও (লগ এন) * ভি হওয়া উচিত যেখানে সূচক খণ্ডন, অসম্পূর্ণ গাছের ভারসাম্য ইত্যাদির জন্য ওভারহেডকে সীমাবদ্ধ করা হয়। সুতরাং 2 বিলিয়ন সারি 2,000,000,000 (প্রায় 31 সেকেন্ড) বারের লগ বেস হবে, বলুন, 2 বা 3 বা 10. প্রতিদিন 40M সন্নিবেশগুলি প্রায় 462 / সেকেন্ড, সন্নিবেশ প্রতি 100 ডলার আইও ... আহ্ ... ওহ। আমি দেখি. এবং এটি ছিল বিস্তৃত এসএসডিগুলির আগে।
চার্লস বার্নস

আপনি স্বতন্ত্রতার সীমাবদ্ধতা বাদ না দিলে স্বতন্ত্রতার জন্য প্রতিটি সারি পরীক্ষা করার ওভারহেডটি আরও বেশি কি হবে না?
ম্যাক্স ক্যান্ডোসিয়া

20

প্রাথমিক কীগুলি সর্বদা ডিফল্ট অনুসারে সূচিযুক্ত হয়।

আপনি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও বা লেনদেন-এসকিউএল ব্যবহার করে এসকিউএল সার্ভার ২০১২ সালে একটি প্রাথমিক কী সংজ্ঞায়িত করতে পারেন। একটি প্রাথমিক কী তৈরি করা স্বয়ংক্রিয়ভাবে একটি সম্পর্কিত অনন্য, ক্লাস্টারড বা নন-ক্ল্লাস্টার্ড সূচক তৈরি করে।

http://technet.microsoft.com/en-us/library/ms189039.aspx


9

এখানে এমএসডিএন থেকে উত্তরণ :

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


8

আপনি যদি ক্লাস্টারযুক্ত না নির্দিষ্ট না করেন তবে কোনও পিকে ক্লাস্টারড ইনডেক্সে পরিণত হবে


3

কোনও PRIMARY KEYবা UNIQUEবাধা ঘোষণার ফলে এসকিউএল সার্ভারটি স্বয়ংক্রিয়ভাবে একটি সূচক তৈরি করে।

সীমাবদ্ধতার সাথে মিল না রেখে একটি অনন্য সূচক তৈরি করা যেতে পারে, তবে অনন্য সূচক না থাকলে একটি বাধা (প্রাথমিক কী বা অনন্য) বিদ্যমান থাকতে পারে না।

এখান থেকে, সীমাবদ্ধতার সৃষ্টি করবে:

  • একই নামের একটি সূচক তৈরি হতে পারে
  • তৈরি সূচকটি বাদ দেওয়ার বিষয়টি অস্বীকার করুন কারণ এটিকে ব্যতিরেকে সীমাবদ্ধতার অনুমতি নেই

এবং একই সাথে সীমাবদ্ধতা হ্রাস যুক্ত সূচকটি বাদ দেবে।

সুতরাং, একটি PRIMARY KEYবা এর মধ্যে প্রকৃত পার্থক্য আছে UNIQUE INDEX:

  • NULLমানগুলিতে প্রবেশের অনুমতি নেই PRIMARY KEYতবে UNIQUEসূচকে অনুমোদিত ; এবং সেট অপারেটরগুলির মতো (ইউনিয়ন, এক্সসিপিটি, ইন্টারস্যাক্ট), NULL = NULLযার অর্থ এখানে দুটি মান হিসাবে NULLএকে অপরের সদৃশ হিসাবে আপনার কেবলমাত্র একটি মূল্য থাকতে পারে ;
  • PRIMARY KEYপ্রতি টেবিলে কেবল একটির উপস্থিত থাকতে পারে যখন 999 টি অনন্য সূচক তৈরি করা যায়
  • যখন PRIMARY KEYসীমাবদ্ধতা তৈরি করা হয়, তবে এটি ক্লাস্টার হিসাবে তৈরি করা হয় যদি না টেবিলটিতে ইতিমধ্যে একটি ক্লাস্টার্ড সূচক থাকে বা NONCLUSTEREDতার সংজ্ঞায় ব্যবহৃত হয়; যখন UNIQUEসূচক তৈরি হয়, এটি এমনভাবে তৈরি করা হয় NONCLUSTEREDযতক্ষণ না এটি সুনির্দিষ্ট না হয় CLUSTEREDএবং ইতিমধ্যে এর অস্তিত্ব নেই;

2

এটিকে একটি প্রাথমিক কী হিসাবে তৈরি করার জন্য এটির জন্য স্বয়ংক্রিয়ভাবে একটি সূচক তৈরি করা উচিত।


1

এসকিউএল সার্ভারে সাধারণত, প্রাথমিক কী স্বয়ংক্রিয়ভাবে সূচকযুক্ত হয়। এটি সত্য, তবে এটির দ্রুত ক্যোয়ারির গ্যারান্টি নেই। প্রাথমিক কী হিসাবে কেবলমাত্র 1 টি ক্ষেত্র থাকলে প্রাথমিক কী আপনাকে দুর্দান্ত কার্য সম্পাদন করবে give তবে, যখন প্রাথমিক কী হিসাবে একাধিক ক্ষেত্র থাকে, তখন সূচকগুলি সেই ক্ষেত্রগুলির উপর ভিত্তি করে।

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

বেশিরভাগ সময়, আপনি 1 মিলিয়ন রেকর্ডের বেশি রেকর্ড না করা পর্যন্ত আপনি সমস্যাটি দেখতে পাবেন না।


0

আমার কাছে নেই (পৃথক) সূচক সহ একটি বিশাল ডাটাবেস।

যে কোনও সময় আমি প্রাথমিক কী দ্বারা জিজ্ঞাসা করি ফলাফলগুলি সমস্ত নিবিড় উদ্দেশ্যে, তাত্ক্ষণিক।


এটি কারণ পিকে একটি ক্লাস্টার্ড সূচক, আপনার ক্যোয়ারী পরিকল্পনাটি দেখুন
এসকিউএলমেনেস

0

প্রাথমিক কীগুলি স্বয়ংক্রিয়ভাবে সূচকযুক্ত হয়

আপনি আপনার ব্যবহারের উপর নির্ভর করে পিকে ব্যবহার করে অতিরিক্ত সূচক তৈরি করতে পারেন

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