যোগদানের দফায় ব্যবহারের মাধ্যমে নির্দিষ্ট ক্ষেত্রে অপ্টিমাইজেশন বাধা প্রবর্তন করা যাবে?


35

এটা আমার নজরে আনা হয়েছিল যে প্রশ্নের দফায়USING নির্মাণের পরিবর্তে (পরিবর্তে ON) নির্দিষ্ট কিছু ক্ষেত্রে অপ্টিমাইজেশন বাধা প্রবর্তন করতে পারে।FROMSELECT

আমি এই মূল শব্দটি বোঝাতে চাইছি:

নির্বাচন করুন *
FROM a
খ JOIN ব্যবহার (a_id)

আরও জটিল ক্ষেত্রে।

প্রসঙ্গ: এই মন্তব্যটি করার জন্য এই প্রশ্নের

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

USING (a_id)বিকল্প জয়েন্ট ক্লজটির সাথে তুলনা করার সময় নিকৃষ্ট পারফরম্যান্সের সাথে দেখাতে নিখুঁত উত্তরটি একটি পরীক্ষার কেস হবে ON a.a_id = b.a_id- যদি এটি আসলে ঘটতে পারে তবে।


2
@ কেগ্রিট্টন: এটাই আমি সাধারণত এতদূর প্রত্যাশা করেছি: এটি USINGকিছুটা দ্রুত - কারণ ফলাফল ম্যাট্রিক্সে এটির একটি কম কলামের ফলস্বরূপ। আপনার অনুসন্ধানগুলি 2005 এবং 2008-এর তারিখের। আমি ধরে নিলাম যে কোনও সমস্যা এখনই ঠিক হয়ে গেছে। তবে , আমি একটি সম্ভাব্য সীমাবদ্ধতা দেখতে পাচ্ছি: এর সাথে যুক্ত জোগুলগুলি যথাযথভাবে প্রয়োগUSING করতে হতে পারে , ফলে যোগদানকারী কলামটি একটি যৌথ পণ্য product এর মাধ্যমে JOIN- এর পুনঃক্রমের ক্ষেত্রে সম্ভাব্যভাবে সীমাবদ্ধ বিকল্পগুলি।
এরউইন ব্র্যান্ডসটেটার

1
আমি এই থ্রেডটি পেয়েছি যা আমার মতো এটি প্রায়শই ব্যবহার করা থেকে বিরত রাখতে পারে কারণ কারণ একটি যুক্তিতে একটি ব্যবহারের শর্তের কারণে ভিউ ডাম্প / পুনরুদ্ধার করতে সমস্যা সৃষ্টি করতে পারে: সংরক্ষণাগারগুলি.পোস্টগ্রেসকল.আর। / Pgsql- বাগ / ২০১১-০6 / msg00030.php আমার এখনও একটি উত্তেজনাপূর্ণ অনুভূতি আছে যেখানে ব্যবহারের ক্ষেত্রে কর্মক্ষেত্রের সমস্যার সাথে সম্পর্কিত আরও একটি থ্রেড ছিল যেখানে কর্মক্ষেত্রটি চালু ছিল, তবে আমি এটি খুঁজে বের করতে যাব, আমি মনে করি। এটি দেখার বাইরে এটি ব্যবহার করা সম্ভবত নিরাপদ এবং কোয়েরি ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ডায়াগনস্টিক পদক্ষেপ হিসাবে চেষ্টা করে দেখুন।
কেজিগ্রিটন

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

2
@ এইচএলজিইএম: এটি কেবল একটি প্রতীকী নাম এবং আমার উদাহরণের মতো কেবল দুটি টেবিল সহ বিভ্রান্তির কোনও অবকাশ নেই। তবুও, আমি প্রশ্নটি সংশোধন করেছি। idকলামের নাম হিসাবে দুর্ভাগ্যজনক ব্যবহারকে উত্সাহিত করতে চাইবে না ।
এরউইন ব্র্যান্ডসেটেটার

2
@ ক্রিশ্চিয়ান ওয়েস্টারবীক: আমি একমত নই "To go-টু জায়গা" ইন-অতল Postgres উত্তরের জন্য হয় (এখনো) মেইলিং। শুধুমাত্র খুব কম
পোস্টগ্র্যাস ডেভস এসওতে

উত্তর:


12

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

LEFT JOIN ( 
     a 
     JOIN b ON a.id = b.a_id
     JOIN c ON b.c_id = c.id
) ON a.id = something.a_id
LEFT JOIN (
     table1 t1
     JOIN table2 t2 ON t1.some_field = t2.other_field
     JOIN talbe3 t3 ON t2.yafield = t3.something_else
) ON ....
repeat a few more times

তার ক্ষেত্রে এগুলির মধ্যে সবচেয়ে খারাপ ব্লকগুলি প্রায় 200k সারিগুলির মাধ্যমে প্রায় 20k বার (গণিতটি) একটি নেস্টেড লুপকে যুক্ত করে তোলে এবং যেহেতু কীগুলি সূচকগুলিতে ঠেলা যায়নি, এটি ছিল একটি ক্রমিক স্ক্যান। এর অর্থ হ'ল ক্যাসকেডিং পরিকল্পনার পরিবর্তনের কারণে সামগ্রিক ক্যোয়ারিটি চালাতে প্রায় 3 ঘন্টা সময় নিয়েছিল। বাম জোড় বিতরণ করে, কীগুলি নীচে নামানো যেতে পারে এবং কোয়েরিটি কয়েক সেকেন্ডের মধ্যে চলেছিল। অবশ্যই এটি হুবহু সমতুল্য নয় যার কারণেই পরিকল্পনাকারী তাদের সমতুল্য হিসাবে বিবেচনা করতে পারবেন না এবং তাই এই পরিকল্পনাটি হ্যাশ জোড় হিসাবে সনাক্ত করা এবং তারপরে একটি নেস্ট লুপটি করা হয়েছিল যা বেদনাদায়ক ধীর ছিল।

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

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