হ্যাঁ, একেবারে প্রাথমিক কীতে সংখ্যার প্রকারের পরিবর্তে স্ট্রিং ব্যবহারের নেতিবাচক পরিণতি ঘটতে পারে এবং এরপরেও যদি সেই পিকে ক্লাস্টার করা হয় (যা প্রকৃতপক্ষে এটি আপনার ক্ষেত্রে রয়েছে)। তবে, আপনি যে ডিগ্রিতে স্ট্রিং ক্ষেত্রটি ব্যবহারের প্রভাব (গুলি) দেখছেন তা হ'ল ক) এই সারণীতে কতগুলি সারি রয়েছে এবং খ) অন্যান্য সারণীতে কত সারি এই পিকে বিদেশী রয়েছে। আপনার যদি এই টেবিলের মধ্যে কেবল 10 কে সারি এবং অন্য কয়েকটি টেবিলের 100k সারি থাকে যা সেই ক্ষেত্রের মাধ্যমে এই টেবিলের কাছে FK থাকে, তবে সম্ভবত এটি এতটা লক্ষণীয় হবে না। সারি সংখ্যা বাড়ার সাথে সাথে সেই প্রভাবগুলি আরও লক্ষণীয় হয়ে ওঠে।
আপনার বিবেচনা করা দরকার যে ক্লাস্টারড ইনডেক্সের ক্ষেত্রগুলি নন-ক্লাস্টারড ইনডেক্সগুলিতে প্রেরণ করা হয়েছে। সুতরাং আপনি কেবল প্রতি সারিতে 40 বাইট অবধি দেখছেন না, তবে (40 * কিছু_ সংখ্যা) বাইট। এবং যে কোনও এফকে টেবিলগুলিতে আপনার সারিগুলিতে একই 40 বাইট থাকে এবং প্রায়শই না হয় সেই ক্ষেত্রটিতে একটি নন-ক্লাস্টারড ইনডেক্স থাকবে কারণ এটি জিনগুলিতে ব্যবহৃত হচ্ছে, সুতরাং এখন কোনও টেবিলে এটি সত্যিই দ্বিগুণ হয়ে গেছে যে এফকে এইটা. যদি কেউ মনে করে যে 40 বাইট * 1 মিলিয়ন সারি * 10 কপি এটি নিয়ে উদ্বিগ্ন হবার কিছু নয়, দয়া করে আমার নিবন্ধটি দেখুন ডিস্ক সস্তা Cheap Orly? যা এই সিদ্ধান্ত দ্বারা প্রভাবিত সমস্ত জায়গার (বা কমপক্ষে সর্বাধিক) বিবরণ দেয়।
বিবেচনা করার জন্য অন্যান্য জিনিস যে ফিল্টারিং এবং স্ট্রিং উপর বাছাই, বিশেষত যখন একটি বাইনারি কোলেশন (আমি আপনি ডাটাবেস ডিফল্ট যা সাধারণত কেস-অবশ ব্যবহার করছেন অনুমান) ব্যবহার না (অর্থাত বেশী সময় লাগে) অনেক কম কার্যকরী ব্যবহার করে যখন চেয়ে INT
/ BIGINT
। এই ক্ষেত্রটিতে ফিল্টার / যোগদান / সাজানো এমন সমস্ত প্রশ্নের প্রভাব ফেলে।
সুতরাং, এর মতো কিছু ব্যবহার করা CHAR(5)
সম্ভবত একটি ক্লাস্টারড পিকে-র জন্য ঠিক আছে, তবে বেশিরভাগ ক্ষেত্রে যদি এটির সাথে সংজ্ঞাও দেওয়া হয় COLLATE Latin1_General_100_BIN2
(বা এর মতো কিছু)।
এবং কি কখনও মূল্য [CODE]
বদলাতে পারে? যদি হ্যাঁ হয় তবে এটি পিকে হিসাবে না ব্যবহার করার আরও বেশি কারণ (আপনি যদি এফকে সেট করে থাকেন তবেও ON UPDATE CASCADE
)। যদি এটি পরিবর্তন করতে না পারে বা না পরিবর্তন করে তবে তা ঠিক আছে, তবে এখনও এটি ক্লাস্টারড পিকে হিসাবে ব্যবহার না করার জন্য যথেষ্ট কারণ রয়েছে।
অবশ্যই, প্রশ্নটি ভুলভাবে বর্ণিত হতে পারে কারণ দেখা যাচ্ছে যে ইতিমধ্যে আপনার পিকেতে ইতিমধ্যে আপনার এই ক্ষেত্রটি রয়েছে।
নির্বিশেষে, আপনার সেরা বিকল্পটি এখন পর্যন্ত [ID_CODE]
ক্লাস্টারড পিকে হিসাবে ব্যবহার করা, সেই ক্ষেত্রটি এফকে হিসাবে সম্পর্কিত টেবিলগুলিতে ব্যবহার করা এবং [CODE]
একটি হিসাবে রাখা UNIQUE INDEX
(যার অর্থ এটি একটি "বিকল্প কী")।
এই উত্তরের মন্তব্যে এই প্রশ্নের উপর ভিত্তি করে আরও কিছু তথ্য আপডেট করুন:
[ID_CODE], প্রাইমারী কী হিসাবে, আমি যদি টেবিলটি সন্ধান করতে [কোড] কলামটি ব্যবহার করি তবে সবচেয়ে ভাল বিকল্প?
এটি সমস্ত একটি দুর্দান্ত অনেকগুলি বিষয়ের উপর নির্ভর করে, যার মধ্যে কয়েকটি আমি ইতিমধ্যে উল্লেখ করেছি তবে পুনরায় ফিরিয়ে আনব:
একটি প্রাথমিক কী হ'ল পৃথক সারিটি কীভাবে চিহ্নিত করা হয়, তা কোনও বিদেশী কী দ্বারা রেফারেন্স করা হয় কি না। আপনার সিস্টেমটি কীভাবে অভ্যন্তরীণভাবে সারিটি সনাক্ত করে তা সম্পর্কিত, তবে আপনার ব্যবহারকারীরা কীভাবে নিজেকে / সেই সারিটি সনাক্ত করেন তা যেমন প্রয়োজন তেমন নয়। অনন্য ডেটা সহ কোনও নাল কলাম কাজ করতে পারে না , তবে ব্যবহারিকতার বিষয়গুলি বিবেচনা করতে হবে, বিশেষত যদি পিকে আসলে কোনও এফকে দ্বারা রেফারেন্স করা হয়। উদাহরণস্বরূপ, জিইউইডিগুলি অনন্য এবং কিছু লোক তাদের বিভিন্ন কারণে বিভিন্নভাবে ব্যবহার করতে পছন্দ করে তবে ক্লাস্টারড ইনডেক্সগুলির পক্ষে এটি বেশ খারাপ ( NEWSEQUENTIALID
আরও ভাল, তবে নিখুঁত নয়)। অন্যদিকে, জিইউইডিগুলি বিকল্প কী হিসাবে ঠিক আছে এবং অ্যাপটি সারিটি সন্ধান করতে ব্যবহার করে, তবে জোয়েন্টগুলি এখনও একটি আইএনটি (বা অনুরূপ) পিকে ব্যবহার করে সম্পন্ন হয়।
এখন পর্যন্ত আপনি আমাদের জানাননি যে [CODE]
ক্ষেত্রটি সমস্ত কোণ থেকে সিস্টেমের সাথে কীভাবে খাপ খায়, এখনই উল্লেখ করা বাহিরে যে আপনি সারিগুলি কীভাবে দেখছেন, তবে এটি কি সমস্ত প্রশ্নের জন্য বা কেবল কিছু জন্য? অত: পর:
সংক্রান্ত [CODE]
মান:
- কিভাবে এটি উত্পন্ন হয়?
- এটি কি বর্ধিত বা psuedo-এলোমেলো?
- এটি কি অভিন্ন দৈর্ঘ্য বা দৈর্ঘ্যের ভিন্নতা?
- কোন অক্ষর ব্যবহৃত হয়?
- যদি বর্ণানুক্রমিক অক্ষর ব্যবহার করা হয়: এটি কেস-সংবেদনশীল বা সংবেদনশীল?
- এটি everোকানোর পরে কি কখনও পরিবর্তন হতে পারে?
এই টেবিল সম্পর্কিত:
- এই টেবিলে অন্য কোনও টেবিল এফকে আছে? অথবা এই ক্ষেত্রগুলি (
[CODE]
বা [ID_CODE]
) অন্য টেবিলগুলিতে ব্যবহার করা হয়, এমনকি বিদেশী না করে স্পষ্টভাবে বলা হয়?
- যদি
[CODE]
একমাত্র ক্ষেত্র পৃথক সারি পেতে ব্যবহৃত হয়, তবে [ID_CODE]
ক্ষেত্রটি কোন উদ্দেশ্যে কাজ করে? যদি এটি ব্যবহার না করা হয় তবে কেন এটি প্রথম স্থানে রয়েছে (যা " [CODE]
ক্ষেত্রটি কি কখনও বদলে যেতে পারে ?") এর উত্তরের উপর নির্ভর করে ?
- এই সারণীতে কত সারি?
- যদি অন্য টেবিলগুলি এই টেবিলটি উল্লেখ করে, তাদের প্রত্যেকটিতে কতগুলি এবং কতগুলি সারি রয়েছে?
- এই টেবিলের জন্য সূচকগুলি কী কী?
এই সিদ্ধান্তটি নিখুঁতভাবে "এনভিচারার হ্যাঁ বা না?" প্রশ্নে করা যাবে না। আমি আবার বলব যে সাধারণভাবে বলতে গেলে আমি এটি একটি ভাল ধারণা বলে মনে করি না, তবে বেশিরভাগ সময় অবশ্যই এটি ঠিক থাকে। এই টেবিলের খুব কম ক্ষেত্র প্রদত্ত এটি সম্ভবত আর কোনও, বা কমপক্ষে অনেকগুলি নয়, সূচক রয়েছে is সুতরাং [CODE]
ক্লাস্টারড সূচক হিসাবে আপনি যে কোনও উপায়ে থাকতে পারেন । এবং যদি অন্য কোনও টেবিলগুলি এই টেবিলটিকে উল্লেখ না করে তবে আপনি এটি পিকে করে তুলতেও পারেন। তবে, যদি অন্য টেবিলগুলি এই টেবিলটিকে রেফারেন্স দেয় তবে আমি [ID_CODE]
ক্ষেত্রটিকে পিকে হিসাবে বেছে নেব , এমনকি যদি নন-ক্লাস্টারযুক্তও হয়।