MAX পাঠ্য বা আরও নির্দিষ্ট, আরও ছোট ধরণের ব্যবহার


22

সারণী তৈরির জন্য কেউ আমার ডিডিএল কোডটি পর্যালোচনা করছিলেন এবং পরামর্শ দিয়েছিলেন, যখন তারা দেখলাম আমি VARCHAR(256)পাঠ্যের জন্য ক্ষেত্রগুলি ব্যবহার করতে দেখলাম আমি খুব ছোট হতে আশা করি, যেমন প্রথম নাম বা যাই হোক না কেন, আমার সর্বদা কেবল ব্যবহার করা উচিত VARCHAR(MAX)এবং সংযুক্ত করা উচিত কেন কেবল বর্ণের ব্যতীত অন্য কিছু ব্যবহার করুন (সর্বাধিক ) । আমি এটি পড়েছি তবে এটি তারিখের মতো মনে হয়েছিল, কারণ এটি ২০০৫-এ ফোকাস করছে, এবং সমস্ত পাঠ্যক্ষেত্রে সারি প্রতি 2 গিগাবাইট পর্যন্ত সম্ভাব্য বরাদ্দ দেওয়ার কোনও সত্যিক সমর্থন প্রমাণিত হয়নি offer

পারফরম্যান্স, স্টোরেজ ইত্যাদির দৃষ্টিকোণ থেকে, কীভাবে VARCHAR(MAX)এসকিউএল সার্ভারের আধুনিক সংস্করণগুলির জন্য আরও কিছু নির্দিষ্ট ধরণের ব্যবহার করতে হবে তা সিদ্ধান্ত নেওয়ার বিষয়ে কীভাবে উচিত ? (উদাঃ, ২০০৮, ২০১২, ২০১৪)

উত্তর:


31

আমি কি সর্বদা (n)varchar(max)পাঠ্য কলামগুলির জন্য ব্যবহার করব ?

না।

এসকিউএল সার্ভারের জন্য, maxডেটা প্রকারগুলি কেবল তখনই নির্দিষ্ট করা উচিত যখন কোনও বিকল্প নেই। পরিবর্তে একটিকে সঠিক বেস প্রকার ( varcharবা nvarchar) চয়ন করা উচিত এবং সঞ্চিত ডেটা উপযুক্ত বলে একটি সুনির্দিষ্ট সর্বোচ্চ দৈর্ঘ্য নির্দিষ্ট করতে হবে specify

শারীর স্টোরেজ অভিন্ন কলাম হিসাবে টাইপ কিনা তা ব্যবহারকারীকে varchar(n)বা varchar(max)যাতে উদ্বেগ নয়।

কারণ না পছন্দ করে (n)varchar(max)সর্বত্র বৈশিষ্ট্য, পরিকল্পনা মানের, এবং কর্মক্ষমতা কাছাকাছি ঘুরা।

একটি বিস্তৃত তালিকা সম্ভবত ব্যবহারিক নয়, তবে অন্যান্য বিষয়গুলির মধ্যে maxকলাম:

বৈশিষ্ট্য

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

কর্মক্ষমতা

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

সংক্ষেপে, অকারণে maxস্পেসিফায়ারটি ব্যবহার করার ফলে অনেকগুলি সূক্ষ্ম (এবং অযাচিত) পার্শ্ব প্রতিক্রিয়া রয়েছে যা এটি করার কোনও মানে হয় না। একক ঘোষণাপত্র ব্যবহারের নাবালিক 'সুবিধাবোধ' কোনও ধরণের ক্ষতিপূরণ নয়।

প্রতিটি প্রসঙ্গে প্রসঙ্গে মূল্যায়ন করুন, সঠিক বেস প্রকার ( varcharবা nvarchar) এবং একটি বুদ্ধিমান স্পষ্ট দৈর্ঘ্য ব্যবহার করুন।

আরও পড়া:


8

এটি একটি ভৌতিক উত্তরের মতো পড়তে চলেছে, তবে কেবল সঞ্চয় এবং পারফরম্যান্স বিবেচনা নেই।

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

আমি ঠিক কীভাবে এটি করব তা জানতাম না, তবে সমস্ত পাঠ্য ক্ষেত্র তৈরি করে varchar(max)যদি কোনও ক্লায়েন্টের ববি টেবিলের সমস্যা থাকে এবং / অথবা আপনার সঞ্চিত পদ্ধতিগুলির প্যারামিটারগুলি থাকে varchar(max)তবে আপনি আক্রমণকারীর পক্ষে আসা সহজ করে তুলছেন you're একটি বৈধ কিন্তু চতুরতার সাথে অশুভ প্যারামিটার মান যা এমন কাজ করতে পারে যা ক্লায়েন্টদের করা উচিত নয় - যা হয় তা that

আপনার আসলে যা প্রয়োজন তার দৈর্ঘ্য সীমাবদ্ধ করে আপনি এই চালাক আক্রমণ থেকে নিজেকে রক্ষা করছেন না (এটি আসলে কী বলা হয়েছিল তা সম্পর্কে আমি নিশ্চিতও নই, আমি কিছুক্ষণ আগে এটি পড়ার কথা মনে করি), তবে আপনি বলছেন না " এগিয়ে যান, "চালানোর জন্য আমাকে একটি 2 জিবি স্ক্রিপ্ট দেওয়ার চেষ্টা করুন।


এটি যাকে বলে সম্ভবত সম্ভবত "ইনজেকশন" ("এসকিউএল ইঞ্জেকশন", আরও সুনির্দিষ্টভাবে)।
অ্যান্ড্রি এম

@ অ্যান্ড্রিএম হ্যাঁ, কোনও কারণে আমি এসকিউএল ট্রানকেশন আক্রমণের কথা ভাবছিলাম (এমএস মনে হয় আমার বুকমার্ক করা লিঙ্কটি নিচে নিয়ে গেছে) তবে এটি মূলত varchar(not-max)পরামিতিগুলিই কাজে লাগাচ্ছে, তাই আমি এখানে আমার মুখে একটি পা আটকে রেখেছিলাম। তবে হ্যাঁ এসকিউএল ইঞ্জেকশনটি এখানে প্রযোজ্য হবে। সম্ভবত আমার এই উত্তরটি কিছুটা নতুন করে বলা উচিত।
ম্যাথিউ গুইন্ডন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.