সাবকিউরিতে অর্ডার দ্বারা ডেটাবেস বাস্তবায়ন


10

আমি একটি অ্যাপ্লিকেশন ব্যবহার করছি (মানচিত্র সার্ভার - http://mapserver.org/ ) যা এসকিউএল স্টেটমেন্টগুলিকে আবৃত করে , যাতে অর্ডার বাই স্টেটমেন্টটি অভ্যন্তরীণ কোয়েরিতে থাকে । যেমন

SELECT * FROM (
        SELECT ID, GEOM, Name
        FROM t
        ORDER BY Name
        ) as tbl

অ্যাপ্লিকেশনটিতে অনেকগুলি বিভিন্ন ডাটাবেস ড্রাইভার রয়েছে। আমি মূলত এমএস এসকিউএল সার্ভার ড্রাইভার এবং এসকিউএল সার্ভার ২০০৮ ব্যবহার করি This যদি কোনও অর্ডার বাই বাই একটি সাবকোয়ারিতে পাওয়া যায় তবে এটি একটি ত্রুটি ফেলে rows

এমএস ডক্স থেকে (যদিও এটি এসকিউএল সার্ভার 2000 এর জন্য এটি এখনও প্রয়োগ হয় বলে মনে হচ্ছে):

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

তবে পোস্টগ্রিসে চালিত হওয়ার সময় একই ধরণের ক্যোয়ারি (9) এবং ওরাকল ফলাফল প্রদান করে - সাবকোয়ারিতে সংজ্ঞায়িত ক্রম হিসাবে। পোস্টগ্রিসে কোয়েরি প্ল্যান দেখায় ফলাফলগুলি সাজানো হয়েছে এবং পোস্টগ্রিজের রিলিজ নোটগুলিতে আইটেমটি অন্তর্ভুক্ত রয়েছে যা বোঝায় সাবকোরি অর্ডারগুলি ব্যবহৃত হয়:

উপরের ক্যোয়ারির সাথে সাব-কোয়ের অর্ডার যখন মিলবে তখন বাছাই করুন

http://en.wikedia.org/wiki/Order_by বলেছেন:

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

তবে আমার নিজের ক্যোয়ারী পরিকল্পনাগুলি পরীক্ষা করা থেকে:

  • এসকিউএল সার্ভার ২০০৮ একটি সাবকোয়রিতে অর্ডার সমর্থন করে না
  • পোস্টগ্রেস 9 একটি সাবকিউরিতে অর্ডারকে সমর্থন করে
  • ওরাকল 10 জি একটি subquery দ্বারা অর্ডার সমর্থন করে

সুতরাং আমার প্রশ্নে এমন কোনও লিঙ্ক রয়েছে যা আনুষ্ঠানিকভাবে নিশ্চিত বা অস্বীকার করতে পারে যে পোস্টগ্র্রেস এবং ওরাকল একটি সাবকিউরিতে বাছাইয়ের অনুমতি দেয় না?


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

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

2
@geographichika এমনকি কিছু ডিবিএমএস যদি এখনও অবধি ধারাবাহিকভাবে কাজ করে তবে ভবিষ্যতেও তারা তা চালিয়ে যাওয়ার কোনও গ্যারান্টি নেই। উদাহরণ হিসাবে, মাইএসকিউএল এর ORDER BY৫..6 (এবং মারিয়াডিবি ৫.৩) মধ্যে অপ্টিমাইজারের উন্নতিগুলি সাবকোয়ারিতে অপ্রয়োজনীয় হিসাবে চিহ্নিত করবে এবং অপ্রয়োজনীয় বাছাই না করবে।
ypercubeᵀᴹ

উত্তর:


15

আপনাকে আপনার অ্যাপ্লিকেশান করতে হবে যাচ্ছেন না করা ORDER BYsubquery ভিতরে (হয়তো এটা প্রথম স্থানে একটি অপ্রয়োজনীয় subquery ব্যবহার করবেন করার জন্য একটি বিকল্প আছে)। আপনি ইতিমধ্যে আবিষ্কার করেছেন যে, এই সিনট্যাক্সটি এসকিউএল সার্ভার ব্যতীত সমর্থিত নয় TOP। এবং এর সাথে TOP, যদি না আপনি কিছু সারি বাইরে রেখে যেতে চান, তবে TOP 100 PERCENTএটি ORDER BYযেভাবেই অপ্টিমাইজডকে রেন্ডার করতে চলেছে ।

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

আমি আপনাকে নিশ্চয়তা দিতে পারি যে, কোনও সন্দেহ ছাড়াই , আপনি যদি অর্ডার সম্পর্কে কোনও গ্যারান্টি চান তবেORDER BY আপনার বহিরতম জিজ্ঞাসাটি করা উচিত। আপনি যে প্ল্যাটফর্মটি ব্যবহার করছেন তা বিবেচনা না করেই এটি এমন একটি মতবাদ হওয়া উচিত যা আপনি কাছে রাখা উচিত।

আপনি এমন একটি লিঙ্কের জন্য জিজ্ঞাসা করছেন যা আনুষ্ঠানিকভাবে জানিয়েছে যে কিছু সমর্থিত নয়। এটি আপনার গাড়ী উড়তে পারে না এমন অফিসিয়াল স্টেটমেন্টের জন্য আপনার গাড়ি মালিকের ম্যানুয়ালটি দেখার মতো।


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

-1

আমি স্বাচ্ছন্দ্যজনক স্বীকার করি তবে আপনি যদি এক চিমটিতে থাকেন তবে সাবকিউরিতে সারিগুলির শীর্ষ সংখ্যাটি ফেরত দেওয়ার চেষ্টা করুন। শীর্ষস্থানীয় ১০০ শতাংশ ফিরিয়ে দেওয়া কাজ করে না তবে আপনি যদি সমস্যার মধ্য দিয়ে যেতে চান তবে সারিগুলির সংখ্যাটি জিজ্ঞাসা করতে পারেন এবং এটিকে ভেরিয়েবল হিসাবে শীর্ষে স্থান দিতে পারেন। আমি এটি একটি উপাত্তের সাথে তুলনামূলক মাত্রা 80 এ সেট করে পরীক্ষা করেছি যাতে আমার মনে হয় এটি এসকিউএল 2000 এর সাথে কাজ করা উচিত।

SELECT * FROM (
        SELECT TOP (100000) ID, GEOM, Name
        FROM t
        ORDER BY Name
        ) as tbl

আমি এটি প্রাথমিকভাবে চেষ্টা করেছিলাম এবং এটি ছোট ডেটাসেটের জন্য সূক্ষ্ম সাজানোর জন্য মনে হয়েছিল। তবে আমি যখন খুব বড় রেকর্ডসেট পাচ্ছিলাম তখন এসকিউএল সার্ভার ২০০৮২২ এ আবার বাছাই করা এলোমেলো হয়ে গেল। মেমরি / পৃষ্ঠার আকারগুলির সাথে সম্পর্কিত হতে পারে?
geographika

দুঃখিত এটি সাহায্য করেনি। শীর্ষস্থানীয় 100 শতাংশ বাছাইয়ের ফলে বাছাইটি এলোমেলোভাবে ফিরে আসে।
DBNull

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