বিদেশী কী ক্যোরির কার্যকারিতা উন্নত করে?


149

ধরুন আমার কাছে 2 টি টেবিল, পণ্য এবং পণ্যশ্রেণী রয়েছে। উভয় টেবিলের বিভাগীয় আইডির সাথে সম্পর্ক রয়েছে। এবং এই কোয়েরি হয়।

SELECT p.ProductId, p.Name, c.CategoryId, c.Name AS Category
FROM Products p
INNER JOIN ProductCategories c ON p.CategoryId = c.CategoryId
WHERE c.CategoryId = 1;

যখন আমি এক্সিকিউশন প্ল্যান তৈরি করি, টেবিল প্রোডাক্ট ক্যাটাগরিগুলি ক্লাস্টার সূচক সন্ধান করে যা প্রত্যাশা হিসাবে as তবে টেবিল পণ্যগুলির জন্য, এটি ক্লাস্টার সূচক স্ক্যান করে, যা আমাকে সন্দেহ করে। কেন এফ কে কোয়েরি পারফরম্যান্স উন্নত করতে সহায়তা করে না?

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

আমার প্রশ্নগুলি হ'ল:

  1. এফকে পাশের সম্পর্কের সীমাবদ্ধতায় সহায়তা করে, এর কি অন্য কোনও উপযোগিতা রয়েছে? এটি কি কোয়েরি পারফরম্যান্স উন্নত করে?

  2. আমি কি সমস্ত টেবিলগুলিতে সমস্ত এফকে কলামগুলিতে (পছন্দসই পণ্যগুলি C বিভাগে আইডি) তৈরি করব?

উত্তর:


186

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


40
ভাল মডেল (সাধারণত) আরও ভাল পারফর্ম করে।
কেনি এভিট

10
"বিদেশী কীগুলি একটি সম্পর্কযুক্ত অখণ্ডতা সরঞ্জাম" - দয়া করে যত্নের সাথে 'রিলেশনাল' শব্দটি ব্যবহার করুন। বিদেশী কীগুলি একটি ডাটাবেস ধারণা, একটি রেফারেন্সিয়াল অখণ্ডতার সীমাবদ্ধতার জন্য একটি সংক্ষিপ্ত হাত। তারা রিলেশনাল মডেলের অংশ নয়। আমি ধরে নিলাম আপনি একটি টাইপ করেছেন।
onedaywhen

7
@ কেনি প্রায়শই হ্যাঁ, তবে কখনও কখনও একটি ভাল মডেলের জন্য আরও বেশি খরচ হয়। দৃষ্টিতে কেস: বিদেশী কীগুলি বেশি প্রক্রিয়াজাতকরণ ঘটায়, কম নয়।
হান্স

8
বিদেশী কী না অন্তত মাইএসকিউএল কর্মক্ষমতা বৃদ্ধি। তদুপরি, আপনি ঠিক বলেছেন, এফকে তৈরির সূচি তৈরি করে না; এফকে তৈরির জন্য একটি সূচক প্রয়োজন
ফ্যালিক্স গাগনন-গ্রেনিয়ার

15
এই উত্তরটি বেশ অযথা কারণ এটি প্রশ্নের উত্তর দেয় না। এটা জেনে রাখা দুর্দান্ত যে বিদেশী কীগুলি পারফরম্যান্সের উপর (ইতিবাচক) প্রভাব ফেলতে চায় না , তবে প্রশ্নটি বাস্তবতার সাথে সম্পর্কিত ছিল, উদ্দেশ্য নয়।
জন

58

বিদেশী কীগুলি (এবং আঘাত করা) কর্মক্ষমতা উন্নত করতে পারে

  1. এখানে যেমন বলা হয়েছে: বিদেশী কীগুলি কার্যকারিতা বাড়ায়

  2. লুকআপ হ্রাস করতে আপনার সবসময় এফকে কলামে সূচি তৈরি করা উচিত। এসকিউএল সার্ভার স্বয়ংক্রিয়ভাবে এটি করে না।

সম্পাদন করা

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

বিদেশী কী কার্যকারিতা উন্নত করতে পারে

বৈদেশিক কী সীমাবদ্ধতা ডেটা পড়ার সময় কর্মক্ষমতা উন্নত করে কিন্তু একই সাথে ডেটা সন্নিবেশ / সংশোধন / মুছে ফেলার সময় কর্মক্ষমতাটি কমিয়ে দেয়।

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


3
এখানে একটি লিঙ্ক রয়েছে যাতে তারা কার্যক্ষমতাকে হ্রাস
cmsjr

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

1
এই উত্তরের লিঙ্কটি মারা গেছে। এটি দুর্ভাগ্যজনক কারণ এফকে এর কার্যকারিতা উন্নত করার একমাত্র যুক্তি।
ক্রিস মোসচিনি

1
@ ক্রিসমোসচিনি - আমি এখন পর্যন্ত আপনার মন্তব্যটি লক্ষ্য করিনি। যেমনটি আপনি উল্লেখ করেছেন, লিঙ্কটি মারা গেছে তবে এর সংক্ষিপ্তসারটি নতুন পোস্টে উল্লেখ করা হয়েছে (বিশদ সহ) আমি পোস্ট করেছি।
লিভেন কের্সেমেকার্স 16:32

2
উইনের জন্য ওয়েবেব্যাক মেশিনের লিঙ্ক ! নিবন্ধটি এখানে এসকিউএলম্যাগ.কম এও পাওয়া যাবে
জন আইজব্রেনার

15

একটি বিদেশী কী হ'ল ডাটাবেস অখণ্ডতা নিশ্চিত করার জন্য একটি ডিবিএমএস ধারণা।

যে কোনও পারফরম্যান্সের প্রভাব / উন্নতিগুলি ডাটাবেস প্রযুক্তির জন্য ব্যবহৃত হবে এবং এটি বিদেশী কীর উদ্দেশ্যে গৌণ হবে।

এসকিউএল সার্ভারে সমস্ত বিদেশী কীতে কমপক্ষে একটি ক্লাস্টারযুক্ত সূচক রয়েছে কিনা তা নিশ্চিত করা ভাল good

আমি আশা করি এটি আপনার জন্য বিষয়গুলি পরিষ্কার করে দিচ্ছে তবে দয়া করে আরও বিশদটির জন্য বিনা দ্বিধায় দয়া করে।


9
@ কেনি এভিট যদি আপনার অখণ্ডতা না থাকে তবে আপনার ডেটা অকেজো। আমি দেখতে পাই যে খুব সহজেই বিক্রি হয়।
এইচএলজিইএম

@ এইচএলজিইএম একবারে একবারে ৪০৪ টি ত্রুটি পাওয়া এখনও যথেষ্ট বহনযোগ্য। সস্তা সংস্থান এবং কম জটিল সিস্টেম ব্যবহার করে বিনিময়ে ব্যতিক্রমী থ্রুটপুট থাকা এখন খুব সহজেই বিক্রি হয়। আপনি ক্যাপ উপপাদ্যে আগ্রহী হতে পারেন ।
ড্যানিয়েল ডান্নয়েস

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

2
আমি এইচএলজিইএম এর সাথে একমত আপনার কোডটি সততা পরিচালনা করতে দেওয়া সর্বদা ভাল ধারণা নয়। ডেটা প্রায়শই সিদ্ধান্ত নেওয়ার জন্য ব্যবহৃত হয়, তবে ডেটা যদি দূষিত হয় তবে সিদ্ধান্তটি সঠিক হবে না।
Lepe

1
"বিদেশী কীগুলি একটি সম্পর্কযুক্ত অখণ্ডতা সরঞ্জাম" - দয়া করে যত্নের সাথে 'রিলেশনাল' শব্দটি ব্যবহার করুন। বিদেশী কীগুলি একটি ডাটাবেস ধারণা, একটি রেফারেন্সিয়াল অখণ্ডতার সীমাবদ্ধতার জন্য একটি সংক্ষিপ্ত হাত। তারা রিলেশনাল মডেলের অংশ নয়। আমি ধরে নিলাম আপনি একটি টাইপ করেছেন।
onedaywhen

4

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


3

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

আমার স্নাতকের:

    select p.ProductId, p.Name, c.CategoryId, c.Name AS Category 
from Products p inner join ProductCategories c on p.CategoryId = c.CategoryIdwhere c.CategoryId = 1;

এটি হয়ে:

SELECT p.ProductId, p.Name, c.CategoryId, c.Name AS Category 
FROM ProductCategories c 
LEFT OUTER JOIN Products P ON
c.CategoryId = p.CategoryId 
WHERE c.CategoryId = 1;

এটি অগত্যা ছোট প্রশ্নগুলিতে বিশাল কর্মক্ষমতা তৈরি করবে না, তবে টেবিলগুলি বড় হয়ে গেলে এটি আরও কার্যকর হতে পারে be


3
অভ্যন্তরীণ যোগদানের তুলনায় কেবল বাইরের যোগদানগুলিই কম দক্ষ হয় না ( স্ট্যাকওভারফ্লো.com / a / 2726683 / 155892 ), এখন আপনার প্রশ্নগুলি বিভ্রান্ত করছে: আপনি আপনার বাহ্যিক যোগগুলিকে অন্তর্নিহিত যোগদানের জন্য স্পষ্টভাবে ডাটাবেসের উপর নির্ভর করছেন (পারফরম্যান্স পুনরুদ্ধার করে) কেবল এটি স্পষ্টভাবে করার পরিবর্তে
মার্ক সোওল

2

মাইএসকিউএল ৫.7-এর জন্য, এটি অবশ্যই একাধিক যোগদানের জন্য অনুসন্ধানগুলি আশ্চর্যজনকভাবে ভাল করতে পারে!

আমি আমার ক্যোয়ারীটি বোঝার জন্য 'ব্যাখ্যা' ব্যবহার করেছি এবং দেখেছি যে আমি 4-5 টেবিলগুলিতে যোগ দিচ্ছি - যেখানে কোনও কী ব্যবহার করা হয়নি। আমি এই টেবিলগুলিতে একটি বিদেশী কী যুক্ত করা ছাড়া কিছুই করিনি এবং ফলাফলটি ছিল লোডটাইমে 90% হ্রাস। 5s এর মধ্যে থাকা প্রশ্নগুলি এখন 500 মিমি বা তারও কম নেয়।

এটি একটি দুর্দান্ত উন্নতি!

এবং অন্যরা যেমন উল্লেখ করেছে, আপনি আপেক্ষিক সততা নিশ্চিত করার যুক্ত বোনাস পাবেন।

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


আপনি কি টেবিলগুলিতে বিদেশী কীগুলি যুক্ত করার আগে প্রয়োজনীয় সূচকগুলি তৈরি করেছিলেন?
জর্জ

1

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


0

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


0

এসকিউএল সার্ভার ২০০৮ হিসাবে বিদেশী কীগুলি কোয়েরিটি অপ্টিমাইজ করার জন্য যেভাবে ডাটাবেস ইঞ্জিন চয়ন করে তার প্রভাব ফেলে পারফরম্যান্সকে প্রভাবিত করতে পারে। নিম্নলিখিত নিবন্ধে স্টার জয়েন হিউরিস্টিকস দেখুন: https ://technet.mic Microsoft.com/en-us/library/2008.04.dwperformance.aspx

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