ধারা অনুসারে সারিগুলি অনুপস্থিত অর্ডারে কী অর্ডারে আসে?


11

একজন প্রোগ্রামার একই অ্যাপ্লিকেশন যা একই ডাটাবেস কাঠামো এবং একই তথ্য ব্যবহার করে একই অ্যাপ্লিকেশনটি পরীক্ষা এবং তুলনা করছে, কেবল দুটি পৃথক ডাটাবেসে, একটি ওরাকল 8 এবং একটি ওরাকল 9 এর সাথে।

অ্যাপ্লিকেশনটি কোনও ORDER BY ধারা ছাড়াই একটি ক্যোয়ারি চালায় ।

তিনি দাবি করেন যে অর্ডার-বাই-কম ক্যোয়ারী উভয় ডাটাবেসে একই ক্রমে সারিগুলি ফিরিয়ে আনতে হবে।

আমি তাকে বলি যদি আপনি ধারা দ্বারা কোনও আদেশ সরবরাহ না করেন তবে একই সারির ক্রমের কোনও ওয়্যারেন্টি নেই

ডাটাবেসের একই সূচক এবং কী রয়েছে। তবে ব্যাখ্যার পরিকল্পনাটি দেখায় যে কোনও একটি ডাটাবেসে ইঞ্জিন যোগ দেওয়া সারণীর একটির কী ব্যবহার করে থাকে অন্য ডেটাবেজে এটি অন্যটির ব্যবহার করে।

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

আমি তাকে বলছি ORDER BYযদি আদেশটি সত্যই গুরুত্বপূর্ণ হয় তবে তাকে অবশ্যই একটি ধারা দিতে হবে।

প্রশ্নটি

সুতরাং আমি তাকে আরও ভালভাবে ব্যাখ্যা করতে পারি:

আপনি যখন ক্লিয়ার মাধ্যমে অর্ডার সরবরাহ করেন না তখন কোনও প্রশ্নের সাথে কী ক্যোয়ারী সারিগুলি নিয়ে আসে এবং কেন এই প্রশ্নটি একই ক্রমে সারিগুলি ফেরত দেয় না?


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

1
@ রবার্টহার্ভে ঠিক এ কারণেই আমি তাকে বলি। আসলে: সংজ্ঞা অনুসারে সম্পর্কিত টেবিলগুলির কোনও নির্দিষ্ট ক্রম থাকতে হবে না।
তুলাইনস কর্ডোভা

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

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

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

উত্তর:


25

উইকিপিডিয়া থেকে :

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

সুতরাং এটি অপরিবর্তিত

এসকিউএল স্পেসিফিকেশন সুনির্দিষ্ট ক্রমটি রেকর্ড করে না যে রেকর্ডগুলি ফিরিয়ে দেওয়া হবে, সুতরাং এটি বাস্তবায়ন নির্ভর হতে চলেছে।

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

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

যেমনটি আপনি বলেছিলেন, ক্রমটি অন্তর্ভুক্ত করুন ORDER BY, যদি আদেশটি গুরুত্বপূর্ণ হয়।


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

+1 এএফএআইসিআর এমনকি যখন কোনও নির্দিষ্ট ডাটাবেসের উদাহরণে আপনি প্রদত্ত যে কোনও ক্যোয়ারী চালান তখনই আদেশটি পরিবর্তিত হতে পারে।

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

2

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

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

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