PostgreSQL সাধারণ টেবিল এক্সপ্রেশন একটি অস্থায়ী টেবিল বনাম?


11

WITH-পোস্টগ্রাইএসকিউএল ডকুমেন্টেশন নিম্নলিখিত উদাহরণটি দেখায়:

WITH regional_sales AS (
        SELECT region, SUM(amount) AS total_sales
        FROM orders
        GROUP BY region
     ), top_regions AS (
        SELECT region
        FROM regional_sales
        WHERE total_sales > (SELECT SUM(total_sales)/10 FROM regional_sales)
     )
SELECT region,
       product,
       SUM(quantity) AS product_units,
       SUM(amount) AS product_sales
FROM orders
WHERE region IN (SELECT region FROM top_regions)
GROUP BY region, product;

এটি আরও নোট করে:

WITH ক্যোয়ারগুলির একটি দরকারী সম্পত্তি হ'ল পিতামাতো ক্যোয়ারীর সম্পাদনকালে কেবল একবারে তাদের মূল্যায়ন করা হয়, এমনকি যদি তারা প্যারেন্ট ক্যোয়ারী বা ভাইয়ের সাথে কোয়েরি করে একাধিকবার উল্লেখ করা হয়।

আমি দেখতে পাচ্ছি যে WITHঅন্যান্য জিনিসগুলির জন্য যেমন পুনরাবৃত্তির মূল্যায়নের জন্য ব্যবহার করা যেতে পারে। তবে উপরের উদাহরণে WITHঅস্থায়ী টেবিলগুলি ব্যবহার এবং তৈরি করার মধ্যে কোনও গুরুত্বপূর্ণ পার্থক্য রয়েছে কি?


আপনি, ক্যোয়ারী তৈরী করতে অন্য কলাম যোগ করার জন্য কোটে ব্যবহার করলে SELECTমধ্যে WITHমাত্র নাম টাইপ এবং rerunning করা হয়। অস্থায়ী টেবিল সহ এটি নিতে হবে DROPএবং CREATE। অন্যদিকে আপনি যদি কোনও প্রশ্ন তৈরি করেন এবং আপনি প্রচুর স্থিতিশীল ডেটা পুনরায় ব্যবহার করতে চলেছেন - সূচী সহ অস্থায়ী টেবিল তৈরি করা সিটিইর বিরুদ্ধে অবশ্যই উপকারী।
ওয়াও সুন

@ ভাওটসুন যদি কোনও কোয়েরির TEMPORARY TABLEসাথে ON COMMIT DROPএটি ব্যবহার করে থাকে তবে এটি কেবল ক্যোয়ারী সংশোধন এবং পুনরায় চালানোর বিষয়, তাই না? postgresql.org/docs/9.6/static/sql-createtable.html
নাথান লং

উত্তর:


16

কয়েকটি সূক্ষ্ম পার্থক্য রয়েছে, তবে কঠোর কিছুই নয়:

  • আপনি একটি টেম্প টেবিলে সূচকগুলি যুক্ত করতে পারেন;
  • টেম্প টেবিলগুলি অধিবেশনটির জীবনের জন্য (বা, যদি ON COMMIT DROPলেনদেন হয়) উপস্থিত থাকে তবে ক্যারাসে WITHসর্বদা কঠোরভাবে অনুসন্ধান করা হয়;
  • যদি কোনও ক্যোয়ারী কোনও ফাংশন / প্রক্রিয়া চালিত করে, তবে এটি অস্থির টেবিলটি দেখতে পারে, তবে এটি কোনও টেবিল-এক্সপ্রেশন দেখতে পাবে নাWITH ;
  • একটি টেম্প টেবিল VACUUMসিস্টেম ক্যাটালগগুলিতে কাজ তৈরি WITHকরে যা তা দেয় না, এটি তৈরি / পূরণ করার জন্য এটি অতিরিক্ত রাউন্ড ট্রিপ প্রয়োজন এবং এটি সার্ভারের ক্যাশে পরিচালনায় অতিরিক্ত কাজ প্রয়োজন, তাই এটি সামান্য কম দক্ষ।

সামগ্রিকভাবে, আপনি WITHযদি না জানেন যে আপনি কোনও সূচক তৈরির মাধ্যমে উপকৃত হবেন না তবে আপনার টেম্প টেম্পলগুলি পছন্দ করা উচিত ।

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


মতামত এবং অস্থায়ী দর্শন সম্পর্কে কি?
সিএমসিডিগ্রাগনকাই

1
কিন্ডা অভ্যন্তরীণ তবে সিটিই শর্তের চেয়ে কোনও টেম্প টেবিলের কাছাকাছি। কোনও সূচী নেই। অধিবেশন স্কোপড। কার্য / পদ্ধতিতে দৃশ্যমান। ক্যাটালগ শূন্যতা প্রয়োজন।
ক্রেগ রিঞ্জার 15
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.