ভারচার (৮০০) এর চেয়ে ভারচার (৫০০) এর কি কোনও সুবিধা আছে?


91

আমি এমএসডিএন ফোরামে এবং এখানে পড়েছি এবং আমি এখনও পরিষ্কার করছি না। আমি মনে করি এটি সঠিক: ভারচর (সর্বাধিক) একটি পাঠ্য ডেটাটাইপ হিসাবে সংরক্ষণ করা হবে, যাতে এতে অসুবিধা রয়েছে। সুতরাং আসুন আমরা বলি যে আপনার ক্ষেত্রটি নির্ভরযোগ্যভাবে 8000 টি অক্ষরের অধীনে থাকবে। আমার ডাটাবেস সারণিতে বিজনেস নাম ক্ষেত্রের মতো। বাস্তবে, একটি ব্যবসায়ের নাম সর্বদা 500 টি অক্ষরের অধীনে থাকবে (আমার টুপি থেকে একটি সংখ্যা টানছে)। দেখে মনে হচ্ছে প্রচুর বারচর ক্ষেত্রগুলি আমি 8k অক্ষর গণনার অধীনে পড়েছি fall

তাহলে আমি কি সেই ক্ষেত্রটি বার্চারের পরিবর্তে (8000) পরিবর্তিত (500) করব? এসকিউএল সম্পর্কে আমি যা বুঝতে পারি তা থেকে এই দুটির মধ্যে কোনও পার্থক্য নেই। সুতরাং, জীবনকে সহজ করার জন্য, আমি আমার সমস্ত ভার্চর ক্ষেত্রগুলি বর্ণচর (8000) হিসাবে সংজ্ঞায়িত করতে চাই। এতে কি কোনও ত্রুটি আছে?

সম্পর্কিত: ভার্চার কলামগুলির আকার (এটি আমার প্রশ্নের উত্তর বলে মনে হয় নি)।


6
ব্যবসায় কার্ডে 500 অক্ষর দীর্ঘ লম্বা কোনও ব্যবসায়ের নামের সাথে মানিয়ে নেওয়ার চেষ্টা করার কথা কল্পনা করুন ... :)
ওএমজি পনিস

4
@ ওএমজি পনিস: প্রতিবার আমি আপনার ব্যবহারকারীর নামটি দেখেছি uck এখন, আপনি কি বলছিলেন? (স্রেফ
ঠাট্টা করা

4
@ জ্যাকলুম: স্পেসম্যান স্পিফ সর্বদা আমার ভোট পাবে। এটি সত্য নয় - কোনও ক্যালভিন ও হবস করবে, তবে বিশেষত তুষারের ভাস্কর্যগুলি। অথবা টাইরনোসরাস একটি এফ -14 বিমান চালাচ্ছে। তবে আমি ডিগ্রি করি ...
ওএমজি পনিস

উত্তর:


21

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


4
প্রাকৃতিকভাবে সর্বাধিক দৈর্ঘ্যের জিনিসগুলির জন্য ... বোঝায়। তবে সর্বাধিক দৈর্ঘ্য সুস্পষ্ট না হলে আপনি কী করবেন? যেমন একটি ব্যবসায়ের নাম।
jcollum

4
এর মতো কোনও কিছুর জন্য, যদি আমি আকারটি সম্ভাব্যভাবে কী হতে পারে তার পূর্বাভাসের কোনও উপায় আগেই না জানায়, তবে আমি সাধারণত ডেটা ধরণের উপর নির্ভর করে একটি
ভার্চর

4
দেখে মনে হচ্ছে এটি 2017 এর মধ্যেও পারফরম্যান্সে একটি পার্থক্য আনবে
a_horse_with_no_name

4
আরো সাম্প্রতিক উত্তর দেখান যে হয় খরচ: এটা অপ্টিমাইজেশান যুক্তিবিজ্ঞান প্রভাবিত মার্টিন স্মিথ উত্তর এবং 8K মোট সারি আকার বিষয় উল্লেখ বিবেচনা gbn এবং অলিভার
টুলমেকারস্টেভ

124

একটি উদাহরণ যেখানে এটি একটি পার্থক্য আনতে পারে তা হ'ল এটি এমন পারফরম্যান্স অপটিমাইজেশনকে আটকাতে পারে যা ট্রিগারগুলির পরে সারণিতে সারি সংস্করণ তথ্য যুক্ত করা এড়িয়ে যায়।

এটি এসকিউএল কিভি দ্বারা আচ্ছাদিত এখানে

সঞ্চিত ডেটার আসল আকারটি অবিচলিত - এটি সম্ভাব্য আকার যা গুরুত্বপূর্ণ।

একইভাবে যদি মেমোরি অপ্টিমাইজড টেবিলগুলি 2016 এর পরে ব্যবহার করা হয় তবে এলওবি কলাম বা কলাম প্রস্থের সংমিশ্রণগুলি ব্যবহার করা সম্ভব হয়েছে যা সম্ভাব্যভাবে ইন্রো সীমা ছাড়িয়ে যেতে পারে তবে জরিমানা সহ।

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

এটি মেমরির খরচ এবং কর্মক্ষমতা উপর একটি বড় নেতিবাচক প্রভাব ফেলতে পারে

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

এসকিউএল সার্ভার ইঞ্জিন নিজেই ফিরে একইরকম কেস হ'ল SORTঅপারেশনগুলির জন্য বরাদ্দ করার জন্য মেমরি অনুদানের গণনা করার সময় এসকিউএল সার্ভার ধরে নেয় যে varchar(x)কলামগুলি গড়ে x/2বাইটগুলি গ্রাস করবে ।

যদি আপনার বেশিরভাগ varcharকলামগুলি এর চেয়ে বেশি পূর্ণ হয় তবে এটি sortঅপারেশনগুলিতে ছড়িয়ে পড়তে পারে tempdb

আপনার ক্ষেত্রে যদি আপনার varcharকলামগুলি 8000বাইট হিসাবে ঘোষিত হয় তবে প্রকৃতপক্ষে আপনার ক্যোয়ারীর মেমরি বরাদ্দ করা হবে তার চেয়ে অনেক কম সামগ্রী রয়েছে তবে এটির প্রয়োজন নেই যা স্পষ্টভাবে অক্ষম এবং মেমরি অনুদানের জন্য অপেক্ষা করতে পারে।

এটি এখান থেকে ডাউনলোডযোগ্য এসকিউএল ওয়ার্কশপস ওয়েবকাস্ট 1 এর অংশ 2 এ আচ্ছাদিত রয়েছে বা নীচে দেখুন।

use tempdb;

CREATE TABLE T(
id INT IDENTITY(1,1) PRIMARY KEY,
number int,
name8000 VARCHAR(8000),
name500 VARCHAR(500))

INSERT INTO  T 
(number,name8000,name500)
SELECT number, name, name /*<--Same contents in both cols*/
FROM master..spt_values

SELECT id,name500
FROM T
ORDER BY number

স্ক্রিনশট

SELECT id,name8000
FROM T
ORDER BY number

স্ক্রিনশট


4
সুতরাং, যদি আমার সমস্ত মান 3 বা 4 টি অক্ষর হয় তবে 4 টি অক্ষরের বেশি হতে পারে না এবং আমি "টেম্পডবিতে ছাঁটাইয়ের ক্রিয়াকলাপ" এড়াতে চাই, আমি আমার কলামটি ভ্যাচার (8) ঘোষণা করব এবং সেই কলামটি প্রয়োগ করতে একটি চেক সীমাবদ্ধতা ব্যবহার করব প্রস্থ 4 টি অক্ষরের বেশি হতে পারে না। আপনি কি মনে করেন?
একে

12
@ অ্যালেক্সকুজনসভ - এই পরিস্থিতিতে আমি তাদের ঘোষণা করব কারণ char(4)যেভাবে যাই হোক ভেরিয়েবল কলামে 2 বাইট ওভারহেড রয়েছে।
মার্টিন স্মিথ

9

সেরা অনুশীলনগুলি ছাড়াও (বিবিলেকের উত্তর)

  • আপনি সর্বাধিক সারি আকার (8060) বাইট এবং সূচকের প্রস্থ (900 বাইট) ডিডিএল সম্পর্কে সতর্কতা পান
  • আপনি এই সীমা অতিক্রম করলে ডিএমএল মারা যাবে
  • এএনএসআই প্যাডিং অন ডিফল্ট তাই আপনি পুরো শ্বেত স্পেসের সঞ্চয় করতে পারেন

38
শুধু ANSI প্যাডিং সম্পর্কে নির্মল যখন ব্যবহার nvarcharএবং varcharধরনের, এই একমাত্র উপায় যে trailing শূণ্যস্থান সন্নিবেশ উপর সংরক্ষিত হয় - না যে মান কলামের মাপ, হিসাবে করতে স্থানগুলি সঙ্গে প্যাডেড হয় charএবং nchar
বেন এম

9

বৃহত্তর কলামগুলির কিছু অসুবিধা রয়েছে যা কিছুটা সুস্পষ্ট এবং সামান্য পরে আপনাকে ধরতে পারে:

  • আপনি একটি আইএনডিএক্স ব্যবহার করেন সমস্ত কলাম - 900 বাইটের বেশি হওয়া উচিত নয়
  • একটি অর্ডার বাই শৃঙ্খলে থাকা সমস্ত কলাম 8060 বাইটের বেশি হতে পারে না। এটি উপলব্ধি করা কিছুটা কঠিন কারণ এটি কেবল কয়েকটি কলামে প্রযোজ্য। দেখুন এসকিউএল 2008 R2 হলো সারি আকার সীমা অতিক্রম বিস্তারিত জানার জন্য)
  • যদি মোট সারির আকার 8060 বাইটের বেশি হয়, তবে আপনি এই সারির জন্য একটি " পৃষ্ঠা স্পিল " পাবেন। এটি পারফরম্যান্সকে প্রভাবিত করতে পারে (এসকিউএল সার্ভারে একটি পৃষ্ঠা একটি বরাদ্দ ইউনিট এবং এটি 8000 বাইট + কিছু ওভারহেডে স্থির করা হয়েছে ceed
  • অন্যান্য অনেকগুলি অভ্যন্তরীণ ডেটাস্ট্রাকচার, বাফার এবং সর্বশেষে আপনার নিজস্ব ভার্চিয়ালগুলি এবং টেবিল-ভেরিয়েবলগুলির এই আকারগুলি মিরর করা দরকার। অত্যধিক আকারের সাথে অতিরিক্ত মেমরি বরাদ্দকরণ কার্যকারিতাকে প্রভাবিত করতে পারে

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

আপনার ব্যবসায়ের নামের উদাহরণে, আপনি সেগুলি কোথায় পাবেন তা চিন্তা করুন। 500 অক্ষরের জন্য সত্যিই স্থান আছে ?? যদি তা না হয় তবে সেগুলি সংরক্ষণ করার মতো কোনও বিষয় নেই। http://en.wikedia.org/wiki/List_of_companies_of_t__United_States- এ কিছু সংস্থার নাম তালিকাভুক্ত করা হয় এবং সর্বোচ্চটি প্রায় 50 টি অক্ষর। সুতরাং আমি কলাম সর্বাধিক জন্য 100 ব্যবহার করব। আরও 80 এর মতো হতে পারে।


2

আদর্শভাবে আপনি এর চেয়ে ছোট দিকে যেতে চাইবেন, যুক্তিসঙ্গত আকারের দৈর্ঘ্যে (500 টি যুক্তিসঙ্গত আকারের নয়) এবং নিশ্চিত করুন যে ডেটা যখন খুব বড় হবে তখন ক্লায়েন্টের বৈধতা ক্যাচ করে এবং একটি দরকারী ত্রুটি প্রেরণ করে।

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


সত্য, এটিও অনেক বড় উদ্বেগ হিসাবে ব্যবহৃত হত। তবে আজকাল, স্থানটি সত্যই সস্তা তাই আমি বিবেচনা করার পক্ষে এটি এত বড় উদ্বেগ বলে মনে করি না, কমপক্ষে আমার দৃষ্টিকোণ থেকে।
বিবিলেকে

4
@ জ্যাকলুম: আপনার উদাহরণ হিসাবে, 500 টি ব্যবসায়ের নামের জন্য যুক্তিসঙ্গত আকারযুক্ত বলে মনে হচ্ছে না।
ওটিস

4
@ ব্ল্যাক: স্টোরেজ ব্যয় নির্বিশেষে, যদি এসকিউএল সার্ভারের সারি আকারের সীমাবদ্ধতা থাকে তবে আপনার কত স্টোরেজ রয়েছে তা বিবেচ্য নয়। আপনি পাঠ্যব্লবগুলিতে সমস্ত কিছু সংরক্ষণ করতে পারেন তবে কিছু এসকিউএল অপারেশন রয়েছে যা আপনি কোনও ব্লাবারে করতে পারবেন না যা আপনি ভার্চারে করতে পারেন।
ওটিস

4
@ ওটিস: আমার বক্তব্যটি হ'ল: ব্যবসায়ের নামের আকারে কোনও আসল বাধা নেই। কোথাও আইন না থাকলে। সুতরাং সেক্ষেত্রে আমি সেই ক্ষেত্রটি ভারচর (8000) তৈরি করে একটি দিন কল করব day আমার চিন্তাভাবনা এরকম হয়: আসল বাধা? ভারচার (এক্স) সত্যিকারের বাধা নেই? ভারচার (8000)।
jcollum

24
আমি ভেবেছিলাম 30 বা তার চেয়ে বেশি নামগুলি শহরের নামগুলির জন্য ভাল, যতক্ষণ না আমি এল পুয়েবলো দে নুয়েস্ট্রা সেওোরা লা রেইনা দে লস অ্যাঞ্জেলস দেল রিও ডি
পোরসিঙ্কুলা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.