যখন সমস্ত মান 36 টি হয় তত্ক্ষেত্রে বর্ণ বনাম বর্ণের সাহায্যে সূচী দ্রষ্টব্যটি লক্ষণীয়ভাবে দ্রুত হবে


30

আমার একটি লিগ্যাসি স্কিমা (দাবি অস্বীকার!) রয়েছে যা সমস্ত টেবিলের জন্য প্রাথমিক কীটির জন্য একটি হ্যাশ-ভিত্তিক উত্পন্ন আইডি ব্যবহার করে (অনেকগুলি রয়েছে)। এই জাতীয় আইডির উদাহরণ হ'ল:

922475bb-ad93-43ee-9487-d2671b886479

এই পদ্ধতির পরিবর্তনের কোনও সম্ভাবনা নেই, তবে সূচকের অ্যাক্সেস সহ দক্ষতা কম। সরাইয়া কারণে এই হতে পারে অগণ্য সেট, সেখানে এক জিনিস আমি লক্ষ্য করেছি যে অনুকূল কম লাগে হয় - দৈর্ঘ্য ঠিক 36 টি অক্ষর হচ্ছে সব অনেক টেবিল সমস্ত আইডি মান সত্ত্বেও, কলাম ধরনের varchar(36), না char(36)

সূচী পৃষ্ঠায় প্রতি প্রবেশের সংখ্যা ইত্যাদির খুব সামান্য বৃদ্ধি ছাড়াই কলামের ধরণগুলি স্থির দৈর্ঘ্যে পরিবর্তিত করে char(36)কোনও উল্লেখযোগ্য সূচক কর্মক্ষমতা সুবিধা দিতে পারে?

অর্থাৎ ভেরিয়েবল দৈর্ঘ্যের ধরণের চেয়ে স্থির দৈর্ঘ্যের ধরণের সাথে ডিল করার সময় পোস্টগ্রিসগুলি কী আরও দ্রুত সঞ্চালন করে?

অনুগ্রহ করে সংক্ষিপ্ত সংগ্রহস্থল সংরক্ষণের কথা উল্লেখ করবেন না - কলামগুলিতে পরিবর্তন আনার জন্য প্রয়োজনীয় শল্য চিকিত্সার সাথে এটি তুলনা করা ঠিক হবে না।

উত্তর:


40

না কোন লাভ নেইম্যানুয়ালটিতে স্পষ্টভাবে বলা হয়েছে :

টিপ: ফাঁকা-প্যাডযুক্ত প্রকারটি ব্যবহার করার সময় বাড়ানো স্টোরেজ স্পেস এবং দৈর্ঘ্য-সীমাবদ্ধ কলামে সঞ্চয় করার সময় দৈর্ঘ্য পরীক্ষা করার জন্য কয়েকটি অতিরিক্ত সিপিইউ চক্র ছাড়াও এই তিন ধরণের মধ্যে পারফরম্যান্সের পার্থক্য নেইcharacter(n)অন্য কয়েকটি ডাটাবেস সিস্টেমে পারফরম্যান্স সুবিধা থাকলেও পোস্টগ্র্রেএসকিউএলে তেমন কোনও সুবিধা নেই; প্রকৃতপক্ষে character(n)অতিরিক্ত স্টোরেজ ব্যয়ের কারণে সাধারণত তিনটির মধ্যে সবচেয়ে ধীরতম হয়। বেশিরভাগ পরিস্থিতিতে text বা character varyingপরিবর্তে ব্যবহার করা উচিত

বোল্ড জোর আমার।

char(n)একটি মূলত পুরানো, অকেজো টাইপ। সঙ্গে লাঠি varchar(n)। আপনার যদি দৈর্ঘ্যটি প্রয়োগ করার প্রয়োজন না হয় varcharবা textএকটি সামান্য বিট দ্রুত হবে। আপনি কোনও পার্থক্য পরিমাপ করতে সক্ষম হবেন না।

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

সম্পর্কিত:

আপনি অন্য বিকল্পগুলির জন্য জিজ্ঞাসা করেননি , তবে আমি দুটি উল্লেখ করব:

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

    বিস্তৃত মানদণ্ডের তুলনা (অন্যান্যগুলির মধ্যে) COLLATE "C"পারফরম্যান্সের প্রভাব :

  2. ইউআইডি , স্পষ্টতই। আপনার স্ট্রিং সন্দেহজনকভাবে একটি ইউআইডি (32 হেক্স ডিজিট প্লাস 4 ডিলিটার) এর মতো দেখাচ্ছে। এগুলিকে প্রকৃতuuidডেটা টাইপহিসাবে সংরক্ষণ করা অনেক বেশি দক্ষ হবেযা একাধিক উপায়ে দ্রুত এবং কেবল 16 বাইটদখল করে- যেমনর্যামের 37 বাইটবিপরীতেchar(36)বাvarchar(36)(সীমানা ছাড়াই সঞ্চিত, কেবল 32 সংজ্ঞায়িত চর) বা 33 ডিস্কে বাইট তবে প্রান্তিককরণের প্যাডিংয়ের ফলেবেশিরভাগ ক্ষেত্রে 40 বাইটেরফলাফল পাওয়া যায়))তথ্য প্রকারেরক্ষেত্রেওCOLLATIONতা অপ্রাসঙ্গিকuuid

    SELECT '922475bb-ad93-43ee-9487-d2671b886479'::uuid

    এটি সহায়ক হতে পারে (শেষ অধ্যায়):

    আরো দেখুন:


এর অর্থ কি এই যে দৈর্ঘ্য সীমাবদ্ধ অক্ষর / বর্ণচর (এন) সীমাবদ্ধতা পরীক্ষা করতে সিপিইউ চক্র ব্যয় করবে যখন পরিবর্তনশীল দৈর্ঘ্যের পাঠ্য ক্ষেত্রটি চরের তুলনায় কম অ্যাক্সেসযোগ্য উপায়ে পাঠ্য আলাদাভাবে সংরক্ষণ করবে, যারা এই দৃশ্যে বিজয়ী এবং এই জয়টি এমনকি পাঠ্যের এক টুকরো দিয়ে 10 মিলিয়ন সারি বলার জন্য বিবেচনার জন্য উপযুক্ত
পাইরেট অ্যাপ্লিকেশন

1
@PirateApp: char(n)প্রায় কখনোই কোনো বিষয়ে ধিক্কার জানাই। এটি ব্যবহার করবেন না। ডেটা ধরণের textএবং varchar(দৈর্ঘ্যের সংশোধক ছাড়াই) বাইনারি সামঞ্জস্যপূর্ণ এবং একই কর্মক্ষমতা বৈশিষ্ট্যগুলি ভাগ করে। দুজনেই পোস্টগ্রিসে সহাবস্থান করার historical তিহাসিক কারণ রয়েছে। অভ্যন্তরীণভাবে, textস্ট্রিং ধরণের (যা ফাংশন ধরণের রেজোলিউশনকে প্রভাবিত করতে পারে) মধ্যে "পছন্দসই" টাইপ। varchar(n)সবেমাত্র বিষয়টি প্রয়োগের জন্য সিপিইউ চক্র । আপনার যখন প্রয়োজন তখন দৈর্ঘ্যের সীমাবদ্ধতা ব্যবহার করুন । ক্ষেত্রে ক্ষেত্রে uuidআসল বিজয়ী।
এরউইন ব্র্যান্ডসেটেটার 12
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.