তারা কীভাবে কাজ করে তার পিছনে আমি ডাটাবেস এবং তত্ত্বগুলির সাথে খুব বেশি পরিচিত নই। পূর্ণসংখ্যার চেয়ে প্রাথমিক কীগুলির জন্য স্ট্রিংগুলি ব্যবহার করা কোনও পারফরম্যান্সের দৃষ্টিকোণ থেকে (সন্নিবেশ / আপডেট / কোয়েরি) করা কি ধীর?
তারা কীভাবে কাজ করে তার পিছনে আমি ডাটাবেস এবং তত্ত্বগুলির সাথে খুব বেশি পরিচিত নই। পূর্ণসংখ্যার চেয়ে প্রাথমিক কীগুলির জন্য স্ট্রিংগুলি ব্যবহার করা কোনও পারফরম্যান্সের দৃষ্টিকোণ থেকে (সন্নিবেশ / আপডেট / কোয়েরি) করা কি ধীর?
উত্তর:
প্রযুক্তিগতভাবে হ্যাঁ, তবে যদি কোনও স্ট্রিং প্রাথমিক কী হিসাবে বিবেচনা করে তবে আপনার সম্ভবত এটি ব্যবহার করা উচিত। এটি সমস্ত আপনি যে টেবিলটি তৈরি করছেন তার আকার এবং প্রাথমিক কী হতে চলেছে এমন স্ট্রিংয়ের দৈর্ঘ্যের উপর নির্ভর করে (দীর্ঘতর স্ট্রিং == তুলনা করা আরও শক্ত)। কয়েক মিলিয়ন সারি রয়েছে এমন টেবিলের জন্য আমি স্ট্রিংটি অগত্যা ব্যবহার করব না, তবে ছোট টেবিলগুলিতে স্ট্রিং ব্যবহার করে যে পরিমাণ পারফরম্যান্স হ্রাস পাবে তা আপনার মাথা ব্যাথার চেয়ে কম হবে যা আপনার পূর্ণসংখ্যার সাথে পূর্ণসংখ্যার সাথে থাকতে পারে that ডেটা সম্পর্কিত কোনও অর্থ নয়।
স্ট্রিংগুলিকে প্রাথমিক কী হিসাবে ব্যবহার করার সাথে আরেকটি সমস্যা হ'ল কারণ সূচকে ক্রমাগত ক্রমানুসারে অর্ডার করা হয়, যখন একটি নতুন কী তৈরি করা হয় যা ক্রমের মাঝখানে থাকে যাতে সূচককে সাদৃশ্য করতে হয় ... আপনি যদি কোনও অটো ব্যবহার করেন তবে সংখ্যার পূর্ণসংখ্যা, নতুন কীটি সূচকের শেষের সাথে যুক্ত হয়েছে।
একটি ক্লাস্টার ইনডেক্স থাকা সারণীতে সন্নিবেশ করানো হয় যেখানে সিকোয়েন্সের মাঝখানে সন্নিবেশ ঘটে সূচিটি পুনরায় লেখার কারণ হয় না। এটি ডেটা সমন্বিত পৃষ্ঠাগুলি পুনরায় লেখার কারণ হয় না। সারিটি যেখানে যাবে সেই পৃষ্ঠাটিতে যদি জায়গা থাকে, তবে এটি সেই পৃষ্ঠাতে স্থাপন করা হবে। পৃষ্ঠায় ডান জায়গায় সারি রাখার জন্য একক পৃষ্ঠা পুনরায় ফর্ম্যাট করা হবে। পৃষ্ঠাটি পূর্ণ হলে পৃষ্ঠার উপরের সারিগুলির অর্ধেক এক পৃষ্ঠায় যাবে এবং অর্ধেক অংশ অন্য পৃষ্ঠায় যাবে a পৃষ্ঠাগুলি এরপরে পৃষ্ঠাগুলির লিঙ্কযুক্ত তালিকায় পুনরায় সংযুক্ত করা হয় যা ক্লাস্টার ইনডেক্সযুক্ত একটি টেবিলের ডেটা অন্তর্ভুক্ত করে। সর্বাধিক, আপনি ডাটাবেসের 2 পৃষ্ঠাগুলি লেখা শেষ করবেন।
স্ট্রিংগুলি যোগ দিতে ধীরে ধীরে এবং বাস্তব জীবনে এগুলি খুব কমই সত্যিই অনন্য হয় (এমনকি যখন তাদের ধারণা করা হয়)। একমাত্র সুবিধা হ'ল আপনি যদি নামটি জানাতে কেবল প্রাথমিক টেবিলে যোগ দিচ্ছেন তবে তারা যোগদানের সংখ্যা হ্রাস করতে পারে। তবে স্ট্রিংগুলিও প্রায়শই পরিবর্তনের বিষয় হয় যখন কোম্পানির নাম পরিবর্তন হয় বা ব্যক্তি বিবাহিত হয় তখন সম্পর্কিত সমস্ত রেকর্ড ঠিক করার সমস্যা তৈরি করে। এটি একটি বিশাল পারফরম্যান্স হিট হতে পারে এবং যদি কোনওভাবে সম্পর্কিত হওয়া সমস্ত টেবিলগুলি যদি সম্পর্কিত না হয় (এটি আপনি যা ভাবেন তার চেয়ে বেশি প্রায়ই ঘটে) তবে আপনার সাথে ডেটা মেলেনি। একটি পূর্ণসংখ্যা যা কখনই রেকর্ডের জীবনে পরিবর্তিত হয় না তা ডেটা অখণ্ডতার দৃষ্টিকোণ এবং পাশাপাশি পারফরম্যান্সের দৃষ্টিকোণ থেকে অনেক বেশি নিরাপদ পছন্দ। প্রাকৃতিক কীগুলি সাধারণত ডেটা রক্ষণাবেক্ষণের জন্য খুব ভাল হয় না।
আমি আরও উল্লেখ করতে চাই যে উভয় বিশ্বের সেরা হ'ল প্রায়শই পিকে হিসাবে একটি স্বতঃসংশোধন কী (বা কিছু বিশেষ ক্ষেত্রে, একটি জিইউইডি) ব্যবহার করা হয় এবং তারপরে প্রাকৃতিক কীতে একটি অনন্য সূচক স্থাপন করা হয়। আপনি দ্রুত যোগদান করতে পারেন, আপনি সদৃশ রেকর্ড পাবেন না, এবং আপনাকে একটি মিলিয়ন শিশু রেকর্ড আপডেট করতে হবে না কারণ একটি সংস্থার নাম পরিবর্তিত হয়েছে।
যতক্ষণ না আপনি প্রাথমিক কী হিসাবে ব্যবহার করেন তা যতক্ষণ না এটি অনন্য matter আপনি যদি গতি বা ভাল ডাটাবেস ডিজাইনের বিষয়ে চিন্তা করেন তবে যদি আপনি তথ্য প্রতিলিপি করার পরিকল্পনা না করেন তবে একটি জিইউডি ব্যবহার করুন।
এটি যদি অ্যাক্সেস ডাটাবেস বা কিছু ক্ষুদ্র অ্যাপ হয় তবে প্রকৃতপক্ষে কে যত্নশীল। আমি মনে করি যে আমাদের বেশিরভাগ বিকাশকারীরা পুরানো ইনট বা গাইডকে সামনের দিকে চড় মারার কারণ হ'ল প্রকল্পগুলি আমাদের উপর বাড়ার উপায় রাখে এবং আপনি নিজেকে বৃদ্ধির বিকল্পটি ছেড়ে যেতে চান।
অনেকগুলি ভেরিয়েবল। এটি টেবিলের আকার, সূচীগুলি, স্ট্রিং কী ডোমেনের প্রকৃতির উপর নির্ভর করে ...
সাধারণত , পূর্ণসংখ্যাগুলি দ্রুত হবে। তবে পার্থক্য কি যত্নের পক্ষে যথেষ্ট বড় হবে? এটা বলা কঠিন.
এছাড়াও, স্ট্রিংগুলি বেছে নেওয়ার জন্য আপনার প্রেরণাটি কী? সাংখ্যিক স্বয়ংক্রিয় বৃদ্ধি কী প্রায়ই এত হয় সহজ হিসাবে ভাল। এটি কি শব্দার্থবিজ্ঞান? কনভেনিয়েন্স? প্রতিলিপি / সংযোগ বিচ্ছিন্ন উদ্বেগ? আপনার উত্তর এখানে আপনার বিকল্পগুলি সীমাবদ্ধ করতে পারে। এটি আপনি ভুলে যাচ্ছেন এমন একটি তৃতীয় "হাইব্রিড" বিকল্প মনে রাখে: গাইডসমূহ।
আপনি কোনও সাধারণ এবং সাউন্ড ডিজাইন না পেয়ে অবধি পারফরম্যান্সের বিষয়ে চিন্তা করবেন না যতক্ষণ না ডেটা বর্ণিত এবং ডেটার উদ্দেশ্যযুক্ত ব্যবহারের সাথে ভাল মানায়। তারপরে, যদি পারফরম্যান্সে সমস্যা দেখা দেয় তবে আপনি সিস্টেমটি টুইট করে এগুলি মোকাবেলা করতে পারেন।
এই ক্ষেত্রে, প্রাকৃতিক প্রাথমিক কী হিসাবে স্ট্রিংয়ের সাথে যাওয়া প্রায় সর্বদা ভাল, আপনি যদি এটি বিশ্বাস করতে পারেন তবে provide স্ট্রিংটি যথাযথ সংক্ষিপ্ত হিসাবে যতক্ষণ না প্রায় 25 অক্ষর সর্বাধিক বলুন তা চিন্তা করবেন না। পারফরম্যান্সের দিক থেকে আপনি কোনও বড় দাম দেবেন না।
ডেটা এন্ট্রি ব্যক্তি বা স্বয়ংক্রিয় ডেটা উত্সগুলি সর্বদা অনুমিত প্রাকৃতিক কীটির জন্য কোনও মান সরবরাহ করে, বা কখনও কখনও বাদ দেওয়া হয়? এটা কি ইনপুট ডেটা মাঝে মাঝে ভুল? যদি তা হয় তবে ত্রুটিগুলি কীভাবে সনাক্ত এবং সংশোধন করা হয়?
প্রোগ্রামার এবং ইন্টারেক্টিভ ব্যবহারকারীরা কোয়েরিগুলি নির্দিষ্ট করে তারা কী চান তা পেতে প্রাকৃতিক কী ব্যবহার করতে সক্ষম হয়?
আপনি যদি প্রাকৃতিক কীটি বিশ্বাস করতে না পারেন তবে একটি সারোগেট আবিষ্কার করুন। আপনি যদি কোনও সারোগেট উদ্ভাবন করেন তবে আপনি সম্ভবত একটি পূর্ণসংখ্যা আবিষ্কার করতে পারেন। তারপরে আপনাকে ব্যবহারকারী সম্প্রদায় থেকে সারোগেটটি গোপন করার জন্য কোথা থেকে চিন্তা করতে হবে। কিছু বিকাশকারী যারা সারোগেট কীটি গোপন করেন নি তারা অনুশোচনা করতে এসেছিল।
সূচকগুলি প্রচুর তুলনা বোঝায়।
সাধারণত, স্ট্রিংগুলি পূর্ণসংখ্যার চেয়ে দীর্ঘ হয় এবং তুলনার জন্য কোলেশন বিধি প্রয়োগ করা যেতে পারে, সুতরাং স্ট্রিংগুলির তুলনা করা সাধারণত পূর্ণসংখ্যার সাথে তুলনা করার চেয়ে আরও বেশি গণনামূলক নিবিড় কাজ।
কখনও কখনও, যদিও, কোনও string to numerical id
টেবিলের সাথে অতিরিক্ত যোগ দেওয়ার চেয়ে প্রাথমিক কী হিসাবে স্ট্রিংটি ব্যবহার করা দ্রুত ।
হ্যাঁ, তবে আপনি যদি কয়েক মিলিয়ন সারি ব্যবহারের প্রত্যাশা না করেন তবে স্ট্রিং-ভিত্তিক কীটি ব্যবহার করবেন না কারণ এটি ধীরতর হয় সাধারণত "অকাল অপ্টিমাইজেশন"। সর্বোপরি, স্ট্রিংগুলি বড় সংখ্যা হিসাবে সংরক্ষণ করা হয় যখন সংখ্যা কীগুলি সাধারণত ছোট সংখ্যা হিসাবে সংরক্ষণ করা হয় as
তবে লক্ষ্য রাখার একটি বিষয় হ'ল যদি আপনার কোনও কীতে সূচকগুলি ক্লাস্টার করা থাকে এবং প্রচুর পরিমাণে সন্নিবেশগুলি করছেন যা সূচকে অ-অনুক্রমিক। লিখিত প্রতিটি লাইন সূচকে আবার লিখতে বাধ্য করবে। আপনি যদি ব্যাচের সন্নিবেশগুলি করছেন, এটি সত্যিই প্রক্রিয়াটি ধীর করতে পারে।
পিকে কলামগুলির জন্য পূর্ণসংখ্যার ব্যবহারের দুটি কারণ:
আমরা পূর্ণসংখ্যার ক্ষেত্রের জন্য পরিচয় সেট করতে পারি যা স্বয়ংক্রিয়ভাবে বৃদ্ধি পেয়েছে।
আমরা যখন পিকে তৈরি করি, তখন ডিবি একটি সূচক তৈরি করে (ক্লাস্টার বা নন ক্লাস্টার) যা টেবিলে সঞ্চিত হওয়ার আগে ডেটা বাছাই করে। কোনও পিকে পরিচয় ব্যবহার করে, অপ্টিমাইজারের রেকর্ড সংরক্ষণের আগে বাছাইয়ের ক্রমটি পরীক্ষা করা উচিত নয়। এটি বড় টেবিলে কর্মক্ষমতা উন্নত করে।
প্রাথমিক কী হিসাবে স্ট্রিং থাকার আপনার কারণ কী?
আমি কেবলমাত্র একটি স্বয়ংক্রিয় বর্ধক পূর্ণসংখ্যার ক্ষেত্রের প্রাথমিক কীটি সেট করব এবং স্ট্রিং ফিল্ডে একটি সূচক রেখে দেব।
আপনি যদি টেবিলে অনুসন্ধান করেন তবে সেগুলি তুলনামূলকভাবে দ্রুত হওয়া উচিত এবং আপনার সমস্ত যোগদান এবং স্বাভাবিক চেহারা আপগুলি তাদের গতিতে প্রভাব ফেলবে না।
আপনি যে পরিমাণ স্ট্রিং ফিল্ডকে ইনডেক্স করে তা নিয়ন্ত্রণ করতে পারেন। অন্য কথায়, আপনি যদি যথেষ্ট মনে করেন তবে আপনি "কেবলমাত্র প্রথম 5 টি অক্ষরকেই সূচক" বলতে পারেন। অথবা যদি আপনার ডেটা তুলনামূলকভাবে সমান হতে পারে তবে আপনি পুরো ক্ষেত্রটি সূচক করতে পারেন।
পারফরম্যান্সের দৃষ্টিকোণ থেকে - হ্যাঁ স্ট্রিং (পিকে) যখন পূর্ণসংখ্যা (পিকে) ব্যবহার করে সম্পাদিত পারফরম্যান্সের তুলনায় কর্মক্ষমতাটি কমিয়ে দেয়, যেখানে পিকে ---> প্রাথমিক কী।
প্রয়োজনের দৃষ্টিকোণ থেকে - যদিও এটি আপনার প্রশ্নের অংশ না এখনও আমি উল্লেখ করতে চাই। যখন আমরা বিভিন্ন টেবিল জুড়ে বিশাল ডেটা পরিচালনা করি আমরা সাধারণত কোনও নির্দিষ্ট টেবিলের জন্য সেট করা যেতে পারে এমন কীগুলির সম্ভাব্য সেটটি সন্ধান করি। এটি মূলত কারণ অনেকগুলি সারণী রয়েছে এবং বেশিরভাগ প্রতিটি বা কিছু টেবিল কিছু সম্পর্কের (বিদেশী কী এর ধারণা) মাধ্যমে অন্যটির সাথে সম্পর্কিত হবে। সুতরাং আমরা সত্যই সবসময় একটি প্রাথমিক কী হিসাবে কোনও পূর্ণসংখ্যা চয়ন করতে পারি না, বরং আমরা সেই টেবিলগুলির জন্য প্রাথমিক কী হিসাবে 3, 4 বা 5 টি বৈশিষ্ট্যের সংমিশ্রণে যাই। এবং এই কীগুলি বিদেশী কী হিসাবে ব্যবহৃত হতে পারে যখন আমরা রেকর্ডগুলি অন্য কোনও টেবিলের সাথে সম্পর্কিত করব। এটি প্রয়োজনীয় হলে বিভিন্ন টেবিল জুড়ে রেকর্ডগুলি সম্পর্কিত করে তোলে।
সর্বোত্তম ব্যবহারের জন্য - আমরা সর্বদা 1 বা 2 স্ট্রিং বৈশিষ্ট্যের সাথে 1 বা 2 পূর্ণসংখ্যার সংমিশ্রণ করি তবে এটির প্রয়োজন হলে কেবল আবার again
ডাটাবেসে স্ট্রিং সম্পর্কিত একটি খুব বড় ভুল বোঝাবুঝি হতে পারে। প্রায় প্রত্যেকেই ভেবেছেন যে সংখ্যার ডাটাবেসের উপস্থাপনা স্ট্রিংয়ের চেয়ে বেশি কমপ্যাক্ট। তারা মনে করে যে ডিবি-এস সংখ্যায় মেমরি হিসাবে প্রদর্শিত হয়। কিন্তু এটি সত্যি না. বেশিরভাগ ক্ষেত্রে সংখ্যার প্রতিনিধিত্ব অন্য সংখ্যার মতো উপস্থাপনের মতো এ স্ট্রিংয়ের বেশি থাকে।
সংখ্যা বা স্ট্রিং ব্যবহারের গতি আরও বেশি নির্ভর করে ইনডেক্সিং এর পরে টাইপ নিজেই।
ডিফল্টরূপে ASPNetUserIds 128 চর স্ট্রিং এবং কার্যকারিতা ঠিক আছে fine
কী এমন রয়েছে সারণিতে অনন্য হওয়া থেকে এটি কী হওয়া উচিত। কারণটা এখানে;
প্রাথমিক স্ট্রিং কী = সঠিক ডিবি সম্পর্ক, 1 টি স্ট্রিং কী (প্রাথমিক) এবং 1 স্ট্রিং সূচক (প্রাথমিক)।
অন্যান্য বিকল্প একটি টিপিক্যাল int- এ চাবিকাঠি, কিন্তু যদি স্ট্রিং রয়েছে অনন্য হতে আপনি এখনও সম্ভবত যাচাই করতে কারণ নন-স্টপ প্রশ্নের একটি তালিকা যোগ করতে অথবা চেক এর অনন্য যে করতে হবে।
সুতরাং কোন int পরিচয় কী ব্যবহার করে = ভুল ডিবি সম্পর্ক, 1 টি কী (প্রাথমিক), 1 টি ইনড ইনডেক্স (প্রাথমিক), সম্ভবত একটি অনন্য স্ট্রিং সূচক, এবং ম্যানুয়ালি একই স্ট্রিংটি বৈধ করার জন্য উপস্থিত নেই (কোনও এসকিএল চেকের মতো কিছু হতে পারে) )।
প্রাথমিক কী জন্য একটি স্ট্রিং উপর কোন int ব্যবহার ভাল পারফরম্যান্স পেতে, STRING কখন রয়েছে অনন্য হতে, এটি একটি খুব অদ্ভুত অবস্থা হতে হবে। আমি সবসময় স্ট্রিং কী ব্যবহার করতে পছন্দ করি। আর একটি চলতি নিয়ম হিসাবে, একটি ডাটাবেস denormalize না যতক্ষণ না আপনি কি দরকার হয়।