এসকিউএল সার্ভারে ভারচার (ম্যাক্স) বনাম টেক্সট ব্যবহার করা


195

আমি কেবলমাত্র পড়েছি যে VARCHAR(MAX)ডেটাটাইপ (যা 2 জিবি চরের ডেটার কাছাকাছি সঞ্চয় করতে পারে) হ'ল TEXTএসকিউএল সার্ভার 2005 এবং পরবর্তী এসকিউএল সার্ভার সংস্করণে ডেটাটাইপের জন্য প্রস্তাবিত প্রতিস্থাপন ।

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

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

    WHERE COL1 LIKE '%search string%'

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

    WHERE CONTAINS (Col1, 'MyToken')



24
এই পোস্টে সর্বাধিক উল্লেখযোগ্য উল্লেখটি হ'ল এমএসডিএন ডকুমেন্টেশনের একটি লিঙ্ক যা দেখায় যে TEXTএবং NTEXT(এবং IMAGE) অবমূল্যায়িত হয়েছে।
ব্রায়ান

লিঙ্কটি দেখুন: stackoverflow.com/q/28980502/1805776
ভিকি

উত্তর:


315

VARCHAR(MAX)টাইপ জন্য একটি প্রতিস্থাপন হয় TEXT। মূল পার্থক্যটি হ'ল কোনও TEXTপ্রকারটি সর্বদা একটি অঙ্কুরের মধ্যে ডেটা সংরক্ষণ করবে যখন VARCHAR(MAX)প্রকারটি 8k সীমাবদ্ধতা অতিক্রম না করে সরাসরি সারিতে ডাটা সংরক্ষণ করার চেষ্টা করবে এবং সেই সময়ে এটি একটি ব্লাবে সংরক্ষণ করে।

লাইক স্টেটমেন্টটি ব্যবহার করা দুটি ডাটাটাইপগুলির মধ্যে অভিন্ন। অতিরিক্ত কার্যকারিতা VARCHAR(MAX)আপনি যে এটি সঙ্গে ব্যবহার করা যেতে পারে দেয় =এবং GROUP BYযেমন অন্য কোন VARCHARকলাম হতে পারে। তবে আপনার কাছে যদি প্রচুর ডেটা থাকে তবে এই পদ্ধতিগুলি ব্যবহার করে আপনার কাছে বিশাল পারফরম্যান্স সমস্যা হবে।

আপনার LIKEঅনুসন্ধান করতে ব্যবহার করা উচিত কিনা , বা আপনার যদি পুরো পাঠ্য সূচি এবং ব্যবহার করা উচিত CONTAINS। এই প্রশ্নটি নির্বিশেষে VARCHAR(MAX)বা একই রকম TEXT

আপনি যদি বৃহত পরিমাণে পাঠ্য অনুসন্ধান করছেন এবং কার্য সম্পাদন কী হয় তবে আপনার একটি পূর্ণ পাঠ্য সূচি ব্যবহার করা উচিত ।

LIKE বাস্তবায়নের জন্য সহজ এবং প্রায়শই অল্প পরিমাণে উপাত্তের জন্য উপযুক্ত তবে এটি একটি সূচক ব্যবহারে অক্ষমতার কারণে এটি বড় ডেটা সহ অত্যন্ত দুর্বল কর্মক্ষমতা।


12
আমি জানতাম না যে এটি পৃষ্ঠাতে 8k তে সংরক্ষণ করবে এবং বড় হলে পৃষ্ঠাটির বাইরে। খুব ঠান্ডা.
Brain2000

3
আপনার শেষ লাইনটি আংশিক ভুল। ওয়াইল্ডকার্ডের শুরুতে যদি স্ট্রিংটির বিরুদ্ধে অনুসন্ধান করা হয় তবে কেবলমাত্র সূচকটি ব্যবহার করতে পারবেন না।
সৌরভ

1
ডেটা সহ বিদ্যমান টেবিল থেকে কোনও ক্ষেত্রকে কোনও পাঠ্য থেকে বার্চারে (সর্বাধিক) পরিবর্তনের কোনও সমস্যা নেই?
ব্যবহারকারী 1531040

17

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


16

আপনি কোনও পাঠ্য ক্ষেত্রটিকে পাঠ্য থেকে বারচরে রূপান্তর না করে অনুসন্ধান করতে পারবেন না।

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.

এইগুলি হ'ল না:

declare @table table (a varchar(max))

মজার বিষয় হল, LIKEএখনও কাজ করে, যেমন

where a like '%a%'

11
+1 শুধু এলোমেলো ডাউনভোট বলার জন্য! লোকেরা যখন আমাকে নীচে নামায় এবং কোনও মন্তব্য না করে, তখন আমাকে পাগল করে তোলে, সত্যই তাদের জীবন লাভ করা দরকার।
টম স্টিকেল

3
তিনি নিম্নগঠিত হওয়ার কারণটি হ'ল যে জিনিসগুলি থেকে আমার যা মনে পড়ে তা থেকে কোনও প্রযুক্তিগত প্রশ্নের উত্তর দেওয়ার সময় আনা বৈধ যুক্তি নয়। আমাদের কেন ব্যবহার করা উচিত varchar(n)বা text, এবং এই উত্তরটি সন্ধান করার জন্য (এখনই আমার মতো) লোকদের সম্পর্কে চিন্তা করুন and আপনি কি মনে করেন, একটি পেশাদার পরিবেশে, যে অস্পষ্ট বিবৃতি দিয়ে তর্ক করা সমস্যার সমাধান করতে সহায়তা করবে? স্ট্যাকওভারফ্লোতে সমস্ত পোস্ট বোঝানো হয়েছে হাজার হাজার লোক, পরিণতিতে কাজ করুন!
আনোয়ার

3
@ জেরাটোপস লও, এই উত্তরটি 6 বছর পুরনো, আমি যখন লিখেছিলাম তখন বরং আমি সবুজ ছিলাম। আমি শব্দটি আরও পরিষ্কার করতে শব্দ পরিষ্কার।
ডিফোর্ক 42

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

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

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

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

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

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

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

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

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

    • সিস্টেম IO বিবেচনা

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

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

উপসংহার

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

উৎস


5

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.