sql server - SQL সার্ভারে VARCHAR(MAX) বনাম টেক্সট ব্যবহার করে




sql-server performance (4)

আমি কেবলমাত্র VARCHAR(MAX) ডাটাটাইপ (যা প্রায় 2 গিগাবাইট গৃহস্থালি তথ্য সংরক্ষণ করতে পারে VARCHAR(MAX) পড়তে হয় SQL সার্ভার 2005 এবং পরবর্তী SQL সার্ভার সংস্করণগুলির মধ্যে TEXT ডাটাটাইপের জন্য প্রস্তাবিত প্রতিস্থাপন।

যদি আমি কোন স্ট্রিংয়ের জন্য একটি কলামের ভিতরে অনুসন্ধান করতে চাই, তাহলে কোন অপারেশন দ্রুততর হবে?

  1. একটি VARCHAR(MAX) কলামের বিরুদ্ধে VARCHAR(MAX) ব্যবহার করে?

    WHERE COL1 LIKE '%search string%'

  2. TEXT কলামটি ব্যবহার করে এবং এই কলামে একটি সম্পূর্ণ পাঠ্য সূচী / ক্যাটালগ রাখুন, এবং তারপর CONTAINS ধারাটি ব্যবহার করে অনুসন্ধান করুন?

    WHERE CONTAINS (Col1, 'MyToken')


আপনি টেক্সট থেকে varchar রূপান্তর ছাড়া একটি টেক্সট ক্ষেত্র অনুসন্ধান করতে পারবেন না।

declare @table table (a text)
insert into @table values ('a')
insert into @table values ('a')
insert into @table values ('b')
insert into @table values ('c')
insert into @table values ('d')


select *
from @table
where a ='a'

এটি একটি ত্রুটি দেয়:

The data types text and varchar are incompatible in the equal to operator.

Wheras এই না:

declare @table table (a varchar(max))

আগ্রহজনকভাবে, এখনও কাজ করে, যেমন

where a like '%a%'

বড় টেক্সট জন্য, সম্পূর্ণ টেক্সট সূচক খুব দ্রুত। কিন্তু আপনি সম্পূর্ণ টেক্সট সূচক varchar(max) পাশাপাশি পারেন।


এমএস অ্যাক্সেস (বিশেষ করে ২003 এর মতো পুরানো সংস্করণ) ব্যবহার করে আপনি এসকিউএল সার্ভারে TEXT ডেটাটাইপ ব্যবহার করতে বাধ্য হন কারণ এমএস অ্যাক্সেস অ্যাক্সেসে একটি মেমো ক্ষেত্র হিসাবে nvarchar(MAX) সনাক্ত করে না, যখন TEXT একটি মেমো-ফিল্ড হিসাবে স্বীকৃত হয়।


  • বেসিক সংজ্ঞা

TEXT এবং VarChar(MAX) নন-ইউনিকোড বৃহত ভেরিয়েবল দৈর্ঘ্য চরিত্র ডেটা টাইপ, যা সর্বোচ্চ 2147483647 নন-ইউনিকোড অক্ষর সঞ্চয় করতে পারে (অর্থাৎ সর্বাধিক সঞ্চয়স্থানটি হল: 2 গিগাবাইট)।

  • কোনটি ব্যবহার করবেন?

এমএসডিএন লিংক অনুসারে মাইক্রোসফ্ট টেক্সট ডাটাটাইপ ব্যবহার এড়াতে পরামর্শ দিচ্ছে এবং এটি SQL সার্ভারের ভবিষ্যতের সংস্করণগুলিতে সরিয়ে ফেলা হবে। Varchar (সর্বোচ্চ) টেক্সট তথ্য টাইপ পরিবর্তে বড় স্ট্রিং মান সংরক্ষণের জন্য প্রস্তাবিত তথ্য টাইপ।

  • ইন-রো বা আউট অফ সারি স্টোরেজ

একটি Text টাইপ কলামের ডেটা একটি পৃথক LOB ডেটা পৃষ্ঠায় আউট-র-সারি সংরক্ষণ করা হয়। টেবিলের তথ্য পৃষ্ঠার সারিটিতে কেবলমাত্র 16 টি বাইট পয়েন্টার LOB তথ্য পৃষ্ঠাতে থাকবে যেখানে প্রকৃত তথ্য উপস্থিত রয়েছে। যদিও একটি Varchar(max) টাইপ কলামের ডাটা-সারিটি 8000 বাইটের চেয়ে কম বা সমান হলে এটি সংরক্ষণ করা হয়। ভার্চার (সর্বোচ্চ) কলাম মানটি 8000 বাইট অতিক্রম করছে তবে ভার্চার (সর্বোচ্চ) কলাম মান একটি পৃথক LOB তথ্য পৃষ্ঠাগুলিতে সংরক্ষণ করা হয় এবং সারিটিতে কেবলমাত্র 16 টি বাইট পয়েন্টার LOB তথ্য পৃষ্ঠাতে থাকবে যেখানে প্রকৃত তথ্য উপস্থিত রয়েছে। তাই In-Row ওয়ারচার (সর্বোচ্চ) অনুসন্ধান এবং পুনরুদ্ধারের জন্য ভাল।

  • সমর্থিত / অসমর্থিত কার্যকারিতা

কিছু স্ট্রিং ফাংশন, অপারেটর বা গঠন যা টেক্সট টাইপ কলামে কাজ করে না, তবে তারা বর্ষার (ম্যাক্স) টাইপ কলামে কাজ করে।

  1. = Varchar (সর্বোচ্চ) টাইপ কলামের অপারেটর সমান
  2. Varchar (সর্বোচ্চ) টাইপ কলাম উপর অনুচ্ছেদ দ্বারা গ্রুপ

    • সিস্টেম আইও বিবেচ্য বিষয়

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

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

উপসংহার

ভাল পারফরম্যান্সের জন্য TEXT পরিবর্তে VarChar(MAX) ডেটা টাইপ ব্যবহার করুন।

Source






sql-types