database - যবহ - রিলেশনাল ডাটাবেজ কি




যখন এবং কেন ডাটাবেস ব্যয়বহুল যোগদান করা হয়? (5)

আমি ডাটাবেসের মধ্যে কিছু গবেষণা করছি এবং আমি সম্পর্কযুক্ত DBs কিছু সীমাবদ্ধতা দেখছি।

আমি বড় বড় টেবিলে যোগদান খুব ব্যয়বহুল পেয়েছি, কিন্তু আমি সম্পূর্ণ নিশ্চিত না কেন। ডিবিএমএসের সাথে যোগদানের অপারেশন চালানোর জন্য কি করতে হবে, এটাকে কোথায় বাধা দিচ্ছে?
কিভাবে এই অস্বাভাবিকতা কাটিয়ে উঠতে সহায়তা করতে পারে? কিভাবে অন্যান্য অপ্টিমাইজেশান কৌশল (উদাহরণস্বরূপ, উদাহরণস্বরূপ) সাহায্য করবেন?

ব্যক্তিগত অভিজ্ঞতা স্বাগত জানাই! আপনি সংস্থার লিঙ্ক পোস্ট করতে যাচ্ছেন, তাহলে উইকিপিডিয়া এড়ান। আমি ইতিমধ্যে যে খুঁজে পেতে জানি।

এর সাথে সম্পর্কিত, আমি বিগ টেকবল এবং সিম্পলডিবি মত ক্লাউড সার্ভিস ডেটাবেসগুলির দ্বারা ব্যবহৃত অস্বাভাবিক পন্থা সম্পর্কে অবাক হয়েছি। এই প্রশ্ন দেখুন।


অন্যদের কি বলেন তা বিস্তারিতভাবে বর্ণনা করা,

যোগদান কিছু lipgloss সঙ্গে শুধু কারটিয়ের পণ্য হয়। {1,2,3,4} এক্স {1,2,3} আমাদের 1২ টি সমন্বয় দেবে (nXn = n ^ 2)। এই গণিত সেট শর্তাবলী প্রয়োগ করা হয় যা একটি রেফারেন্স হিসাবে কাজ করে। ডিবিএমএস শর্তাবলী (যেমন উভয় বাম এবং ডান যেখানে 2 বা 3 আছে) প্রযোজ্য শর্তাবলী আমাদের দিতে। আসলে এটি আরো অপ্টিমাইজড কিন্তু সমস্যা একই। সেটের আকারের পরিবর্তনগুলি ফলাফল আকারকে বাড়িয়ে তুলবে। মেমরি এবং সিপিইউ চক্রের সমস্ত পরিমাণ ক্ষয়ক্ষতি পদে প্রভাবিত হয়।

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


আপনি টেবিল যোগদান করছি যাতে ক্রম অত্যন্ত গুরুত্বপূর্ণ। যদি আপনার কাছে দুটি সেটের ডেটা থাকে তবে কোয়েরিটি তৈরি করার চেষ্টা করুন যাতে প্রথমটি ক্যোয়ারীটিতে কাজ করা ডেটা পরিমাণ হ্রাস করার জন্য প্রথমে ব্যবহার করা হবে।

কিছু উপাত্তের জন্য এটি কোন ব্যাপার নয়, উদাহরণস্বরূপ MS SQL গুলি বেশিরভাগ সময় সঠিকভাবে যোগদান করার আদেশ জানায়। কিছু (যেমন আইবিএম ইনফর্মিক্স) জন্য অর্ডারটি সমস্ত পার্থক্য তৈরি করে।


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

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

সঠিকভাবে সম্পন্ন হলে, সাধারণত বৃহৎ পরিমাণে তথ্য তুলনা, সমন্বয় বা ফিল্টার করার সেরা উপায় যোগদান করে।


কর্মক্ষমতা উন্নত Denormalising? এটা বিশ্বাসী শোনাচ্ছে, কিন্তু এটা জল রাখা না।

ড। টেড কোড্ডের সাথে কোম্পানির কারসাজি ক্রিস ডেট রিলেশনাল ডেটা মডেলের মূল সমর্থক ছিলেন, স্বাভাবিকীকরণের বিরুদ্ধে ভুল বোঝাপড়া যুক্তি দিয়ে ধৈর্যের বাইরে চলে গিয়েছিলেন এবং বৈজ্ঞানিক পদ্ধতির মাধ্যমে সেগুলি ধীরে ধীরে ধ্বংস করে দিয়েছিলেন: তিনি প্রচুর তথ্য উপাত্ত পেয়েছিলেন এবং এই দাবিগুলি পরীক্ষা করেছিলেন।

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

তিনি যে পাওয়া যায়:

  • তাদের কিছু বিশেষ ক্ষেত্রে জন্য রাখা
  • তাদের সব সাধারণ ব্যবহারের জন্য বন্ধ পরিশোধ করতে ব্যর্থ
  • তাদের সব অন্যান্য বিশেষ ক্ষেত্রে জন্য উল্লেখযোগ্যভাবে খারাপ

এটি সব কাজ সেট আকার মিতব্যয়ী ফিরে আসে। সঠিকভাবে সূচী সেট আপ সঙ্গে সঠিকভাবে নির্বাচিত কী জড়িত যোগদান সস্তা, ব্যয়বহুল নয়, কারণ তারা সারি materialized হয় আগে ফলাফল উল্লেখযোগ্য pruning অনুমতি দেয়।

পরিণতি বস্তুগতভাবে বাল্ক ডিস্কটি পড়ায় জড়িত থাকে যা ব্যাসার্ধের সর্বাধিক ব্যয়বহুল দিক। বিপরীতে, একটি যোগদান সম্পাদন, যৌক্তিকভাবে শুধুমাত্র কী পুনরুদ্ধার প্রয়োজন। অনুশীলনে, এমনকি মূল মানগুলিও আনা হয় না: মূল হ্যাশ মানগুলি তুলনামূলকভাবে যোগদান করার জন্য, মাল্টি-কলাম যোগদানের খরচ কমানো এবং মূলত স্ট্রিং তুলনা সহ যোগদানের খরচ হ্রাস করার জন্য ব্যবহৃত হয়। কেবল ক্যাশে অতিমাত্রায় আরো উপযুক্ত হবে না, সেখানে অনেক কম ডিস্ক পড়ার আছে।

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

নিশ্চিতভাবে এই ধরনের অপ্টিমাইজেশান ডিমানোরালাইজড ডেটাবেসে প্রয়োগ করা যেতে পারে, কিন্তু যারা স্কিমাটিকে ডিফর্মালাইজ করতে চান তাদের সাধারণত সাধারণত কার্ডিনালিটি মনে করেন না (যদি) তারা সূচী সেট করে।

টেবিলের স্ক্যানগুলি (একটি যোগদান তৈরির সময় একটি টেবিলের প্রতিটি সারির পরীক্ষা) বোঝার জন্য এটি খুবই গুরুত্বপূর্ণ। একটি ক্যোয়ারী অপটিমাইজার শুধুমাত্র একটি বা তার বেশি নিম্নলিখিত ধারণ করে কেবলমাত্র একটি টেবিল স্ক্যান চয়ন করবে।

  • সম্পর্কের 200 টিরও কম সারি রয়েছে (এই ক্ষেত্রে একটি স্ক্যান সস্তা হবে)
  • যোগদানের কলামগুলিতে কোনও উপযুক্ত সূচী নেই (যদি এই কলামগুলিতে যোগদান করা অর্থপূর্ণ হয় তবে কেন তারা সূচী হয় না? এটি ঠিক করুন)
  • কলামগুলির সাথে তুলনা করার আগে একটি টাইপ জোরপূর্বক প্রয়োজন হয় (ডাব্লুটিএফ ?! এটি ঠিক করুন বা বাড়ি যান) ADO.NET এর জন্য শেষ নোটগুলি দেখুন
  • তুলনা এর আর্গুমেন্ট এক একটি অভিব্যক্তি (কোন সূচক)

একটি অপারেশন সঞ্চালন এটা সম্পাদন না চেয়ে আরো ব্যয়বহুল। যাইহোক, ভুল অপারেশন সম্পাদন করা হচ্ছে, বিন্দুহীন ডিস্ক I / O এ বাধ্য করা হচ্ছে এবং আপনার প্রয়োজনীয় যোগদানটি সম্পাদন করার পূর্বে ড্রসকে বাতিল করা আরও বেশি ব্যয়বহুল। এমনকি যখন "ভুল" অপারেশনটি প্রাক্ক্রপিত হয় এবং সূচীগুলি সুস্পষ্টভাবে প্রয়োগ করা হয়, তখনও উল্লেখযোগ্য শাস্তি থাকে। একটি যোগদান precompute Denomalising - আপডেট ব্যতিক্রমগুলি entailed সত্ত্বেও - একটি বিশেষ যোগদান একটি প্রতিশ্রুতি। যদি আপনি একটি ভিন্ন যোগদান প্রয়োজন, যে প্রতিশ্রুতি আপনি বড় খরচ হবে।

যদি কেউ আমাকে পরিবর্তনশীল বিশ্বের মনে করিয়ে দিতে চায় তবে আমার মনে হয় যে আপনি ক্ষতিকারক হার্ডওয়্যারগুলিতে যে বড় ডেটাসেটগুলি তারিখের ফলাফলগুলির বিস্তারকে অতিমাত্রায় বাড়িয়ে তুলবেন।

বিলিং সিস্টেম বা জাঙ্ক মেইল ​​জেনারেটর (আপনার জন্য লজ্জা) নিয়ে কাজ করে এমন সকলের জন্য এবং ক্রোধে হাতের কাছে কীবোর্ড স্থাপন করে আমাকে জানাতে যে আপনি ডিমানমালাইজেশন দ্রুততর, দুঃখিত তবে আপনি বিশেষ একজনের মধ্যে বসবাস করছেন ক্ষেত্রে - বিশেষত, যেখানে আপনি সমস্ত তথ্য, ইন ক্রম প্রক্রিয়া। এটি একটি সাধারণ ঘটনা নয়, এবং আপনি আপনার কৌশলতে ন্যায্য।

আপনি মিথ্যাভাবে জেনারাইজিং মধ্যে ন্যায্যতা হয় না । তথ্য গুদামের পরিস্থিতিতে ডিনারমালাইজেশনের যথাযথ ব্যবহার সম্পর্কে আরও তথ্যের জন্য নোট বিভাগের শেষটি দেখুন।

আমি সাড়া দিতে চাই

যোগদান কিছু lipgloss সঙ্গে শুধু কারটিয়ের পণ্য হয়

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

কার্টিজিয়ান পণ্য উত্পাদন করার জন্য আপনি কখনই অপটিমাইজার পাবেন না সেটি হ'ল পূর্বাভাস সরবরাহ করতে ব্যর্থ হোন: SELECT * FROM A,B

নোট

ডেভিড Aldridge কিছু গুরুত্বপূর্ণ অতিরিক্ত তথ্য প্রদান করে।

ইনডেক্স এবং টেবিল স্ক্যানগুলির পাশাপাশি বিভিন্ন কৌশল রয়েছে, এবং একটি আধুনিক অপটিমাইজার তাদের মৃত্যুদন্ড পরিকল্পনা করার আগে তাদের সমস্ত খরচ করবে।

পরামর্শের একটি বাস্তব অংশ: যদি এটি একটি বিদেশী কী হিসেবে ব্যবহার করা যেতে পারে তবে এটি সূচী করুন, যাতে একটি সূচক কৌশলটি অপ্টিমাইজারের জন্য উপলব্ধ

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

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

যে কারণে আমি সাবধানে সাড়া দিয়েছিলাম সেটি হ'ল কথিত বিবৃতিটি বলে

যোগদান কার্টিজিয়ান পণ্য হয় ...

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

আমি এইটিকে ডেকেছি কারণ আমি পাঠকদের মডেলের বিভ্রান্তিকর বিভ্রান্তির প্রাচীন ফাঁদে পড়তে চাই না। একটি মডেল একটি আনুমানিক, ইচ্ছাকৃত ম্যানিপুলেশন জন্য ইচ্ছাকৃতভাবে সরলীকৃত।

একটি টেবিল স্ক্যান যোগ কৌশল নির্বাচন জন্য কাটা বন্ধ ডাটাবেস ইঞ্জিনের মধ্যে পরিবর্তিত হতে পারে। এটি ট্রি-নোড ফিল-ফ্যাক্টর, কী-মান মাপ এবং অ্যালগরিদমের সাবলেটিজির মতো অনেক বাস্তবায়ন সিদ্ধান্তের দ্বারা প্রভাবিত হয় তবে বিস্তৃতভাবে হাই-পারফরম্যান্স ইন্ডেক্সিংয়ের k লগ লগ n + c এর কার্যকর সময় থাকে। C শব্দটি বেশিরভাগ সেটআপ সময় তৈরি করে থাকে, এবং বক্ররেখাটির আকৃতি মানে আপনাকে শতভাগের মধ্যে না হওয়া পর্যন্ত (একটি রৈখিক অনুসন্ধানের তুলনায়) বেতন দেওয়া হয় না।

কখনও কখনও denormalisation একটি ভাল ধারণা

Denormalisation একটি নির্দিষ্ট যোগদান কৌশল একটি প্রতিশ্রুতি। আগে উল্লেখ করা হয়েছে, এই অন্যান্য যোগদান কৌশল সঙ্গে হস্তক্ষেপ। কিন্তু যদি আপনার ডিস্ক স্পেসের buckets, অ্যাক্সেসের প্রত্যাশিত প্যাটার্ন এবং অনেক বা এটি সমস্ত প্রক্রিয়া করার প্রবণতা থাকে, তবে একটি যোগদান precomputing খুব উপযুক্ত হতে পারে।

আপনি আপনার অ্যাক্সেসের পথগুলি সাধারণত অ্যাক্সেসের পথগুলির জন্য সমস্ত যোগদানগুলি ব্যবহার করে এবং অ্যাক্সাক করার অ্যাক্সেস পথগুলিও নির্ধারণ করতে পারেন। এটি ডেটা গুদামের পিছনে প্রিমিয়ার, অথবা কমপক্ষে এটি যখন তাদের দ্বারা তৈরি করা হয় তখন তারা জানে যে তারা কেন করছেন তা তারা কেন করছেন এবং কেবলমাত্র buzzword সম্মতির জন্য নয়।

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

এখানে একটি গুরুত্বপূর্ণ বিন্দু পর্যায়ক্রমিক আপডেট ব্যতীত, তথ্য গুদাম শুধুমাত্র পড়া হয় । এটি আপডেট ব্যতিক্রমগুলির প্রশ্ন উত্থাপন করে।

আপনার OLTP ডেটাবেস (ডেটাবেস যা ডেটা এন্ট্রি ঘটবে) হ্রাস করার ভুল করবেন না। এটি বিলিংয়ের জন্য আরও দ্রুত হতে পারে তবে আপনি যদি এটি করেন তবে আপনি আপডেট ব্যতিক্রমগুলি পাবেন। আপনি কি স্টাফ পাঠানো বন্ধ করার জন্য কখনও রিডারের ডাইজেস্ট পেতে চেষ্টা করেছেন?

ডিস্ক স্থান এই দিন সস্তা, তাই নিজেকে খুঁজে নষ্ট। কিন্তু ডিফর্মালাইজেশান তথ্য গুদাম জন্য গল্প শুধুমাত্র অংশ। অনেক বড় কর্মক্ষমতা লাভ প্রাককামিত রোলড আপ মান থেকে প্রাপ্ত হয়: মাসিক totals, জিনিস সাজানোর। এটা সবসময় কাজের সেট হ্রাস সম্পর্কে।

টাইপ mismatches সঙ্গে ADO.NET সমস্যা

ধরুন আপনার কাছে একটি SQL সার্ভার টেবিল রয়েছে যা টাইপ varchar এর একটি সূচীযুক্ত কলাম রয়েছে এবং আপনি এই কলামে একটি প্রশ্নবিস্তার সীমাবদ্ধ করার জন্য প্যারামিটারটি পাস করতে AddWithValue ব্যবহার করেন। C # স্ট্রিংগুলি ইউনিকোড, সুতরাং অনুমানকৃত প্যারামিটারের ধরন NVARCHAR হবে, যা VARCHAR এর সাথে মেলে না।

VARCHAR NVARCHAR তে একটি বিস্তৃত রূপান্তর তাই এটি নিখুঁতভাবে ঘটবে - কিন্তু ইন্ডেক্স থেকে বিদায় বলুন, এবং কেন সৌভাগ্য কামনা করছি।

"ডিস্ক হিট গণনা" (রিক জেমস)

যদি সবকিছু RAM তে ক্যাশে থাকে, তবে JOINs বরং সস্তা। যে, স্বাভাবিককরণে অনেক কর্মক্ষমতা শাস্তি নেই

যদি একটি "স্বাভাবিককৃত" স্কিমা JOINs আঘাত করার জন্য যুক্ত করে তবে JOINs " JOINs " JOINs ডিস্কটি আঘাত করতে হবে না, তারপরে ডিনারর্মালাইজেশান একটি কর্মক্ষমতা প্রতিযোগিতা জিতেছে।

আসল লেখকের মন্তব্য: আধুনিক ডাটাবেস ইঞ্জিনগুলি অ্যাক্সেস সিকোয়েন্সিং সংগঠিত করার জন্য খুব ভাল, যোগদান অপারেশনের সময় ক্যাশে মিসগুলি কমিয়ে আনতে। উপরোক্ত, সত্য যখন, বৃহত্তর তথ্য বৃহত্তর তথ্য অগত্যা সমস্যাগতভাবে ব্যয়বহুল যোগদান হিসাবে impiscrued হতে পারে। এটি অনভিজ্ঞ ডেভেলপারদের অংশে দুর্বল সিদ্ধান্ত নেওয়ার কারণ হতে পারে।


বোতামটি প্রায়শই ডিস্ক I / O, এবং এমনকি আরও বিশেষভাবে - র্যান্ডম ডিস্ক I / O (তুলনামূলকভাবে, ক্রমানুযায়ী পঠনগুলি বেশ দ্রুত এবং এটি আরও কৌশলগুলি পড়ার সাথে ক্যাশে করা যেতে পারে)।

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

একটি একক ডিমানমালাইজড টেবিলের একই সমস্যা রয়েছে - সারি বড়, এবং একটি ডেটা পৃষ্ঠায় খুব কম ফিট। যদি আপনি অন্য যে কোনও সারি থেকে দূরে থাকা প্রয়োজন (এবং বড় সারি আকার তাদের আরও পৃথক করে তোলে) তাহলে আপনার আরো র্যান্ডম I / O থাকবে। আবার, একটি টেবিল স্ক্যান এই এড়াতে বাধ্য করা হতে পারে। কিন্তু, এই সময়, আপনার টেবিলের স্ক্যানটি বৃহত সারির আকারের কারণে আরো তথ্য পড়তে হবে। যেটিতে আপনি একক অবস্থান থেকে একাধিক অবস্থানে ডেটা অনুলিপি করছেন এবং আরডিবিএমএসটি পড়ার (এবং ক্যাশে) আরও অনেক কিছু যোগ করুন।

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

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

  • একটি লুপ যোগদান কমপক্ষে সস্তা (অন্তত 1) ছোট ডেটাসেট জন্য সস্তা।
  • একটি মার্জ যোগদান প্রথম ডেটাসেট উভয় একটি সাজানোর প্রয়োজন। যদি আপনি সূচীকৃত কলামে যোগদান করেন, তবে সূচীটি ইতিমধ্যে সাজানো হয়েছে এবং কোনও কাজ করার দরকার নেই। অন্যথায়, কিছু CPU এবং মেমরি ওভারহেড বাছাই করা হয়।
  • হ্যাশ যোগদান উভয় মেমরি (হ্যাশ টেবিল সংরক্ষণ করতে) এবং CPU (হ্যাশ তৈরি করতে) প্রয়োজন। আবার, এটি ডিস্ক I / O এর সাথে সম্পর্কিত মোটামুটি দ্রুত। যাইহোক , হ্যাশেবলটি সংরক্ষণের জন্য পর্যাপ্ত RAM নেই তবে SQL সার্ভারটি হ্যাশেবলের অংশগুলি এবং খুঁজে পাওয়া সারির অংশগুলি সংরক্ষণের জন্য tempdb ব্যবহার করবে এবং তারপরে একটি সময়ে হ্যাশেবলের কেবলমাত্র অংশগুলিতে প্রক্রিয়া করবে। সব জিনিস ডিস্ক হিসাবে, এই মোটামুটি ধীর।

সর্বোত্তম ক্ষেত্রে, এইগুলি কোনও ডিস্ক I / O নয় - এবং এটি একটি কর্মক্ষমতা দৃষ্টিকোণ থেকে নগণ্য।

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

যেহেতু প্রশ্নোত্তর সময় সাধারণত আই / ও খরচ দ্বারা প্রভাবিত হয়, এবং আপনার তথ্য আকার পরিবর্তন করে না (কিছু খুব ক্ষুদ্রকায় সারি ওভারহেড হ্রাস) denormalization সঙ্গে, শুধু একসঙ্গে টেবিল মার্জ করে একটি অসাধারণ পরিমাণ সুবিধা আছে। পারফরম্যান্স, আইএমই, বৃদ্ধি করতে থাকে এমন ডিমনর্মালাইজেশনের ধরনটি গণনা করতে প্রয়োজনীয় 10,000 সারি পড়ার পরিবর্তে গণনা মানগুলি ক্যাশে করছে।





denormalization