ধারণাগত প্রশ্ন: স্বতন্ত্র অনুসন্ধানগুলি যোগ দেওয়ার চেয়ে আরও দ্রুত, বা: ক্লায়েন্টের পাশে থাকা প্রতিটি তথ্যকে আমি একটি নির্বাচনী বিবৃতিতে ছড়িয়ে দেওয়ার চেষ্টা করব বা যতটা সুবিধাজনক বলে মনে হচ্ছে এতগুলি ব্যবহার করব?
টিএল; ডিআর : আমার যোগদান করা ক্যোয়ারীটি যদি ব্যক্তিগত অনুসন্ধানগুলি চালানোর চেয়ে বেশি সময় নেয় তবে এটি আমার দোষ নাকি এটি প্রত্যাশিত?
প্রথমত, আমি খুব ডাটাবেস বুদ্ধিমান নই, সুতরাং এটি কেবল আমার হতে পারে, তবে আমি লক্ষ্য করেছি যে যখন আমাকে একাধিক টেবিল থেকে তথ্য পেতে হয়, স্বতন্ত্র টেবিলের একাধিক প্রশ্নের মাধ্যমে এই তথ্য পাওয়া "প্রায়শই" দ্রুত হয় (সম্ভবত একটি সাধারণ অভ্যন্তরীণ জোড় যুক্ত) এবং ক্লায়েন্টের পাশে ডেটাটি একত্রে প্যাচ করুন যে কোনও (জটিল) যোগদানের ক্যোয়ারী লেখার চেষ্টা করার জন্য যেখানে আমি একটি কোয়েরিতে সমস্ত ডেটা পেতে পারি।
আমি একসাথে একটি খুব সাধারণ উদাহরণ রাখার চেষ্টা করেছি:
স্কিমা সেটআপ :
CREATE TABLE MASTER
( ID INT NOT NULL
, NAME VARCHAR2(42 CHAR) NOT NULL
, CONSTRAINT PK_MASTER PRIMARY KEY (ID)
);
CREATE TABLE DATA
( ID INT NOT NULL
, MASTER_ID INT NOT NULL
, VALUE NUMBER
, CONSTRAINT PK_DATA PRIMARY KEY (ID)
, CONSTRAINT FK_DATA_MASTER FOREIGN KEY (MASTER_ID) REFERENCES MASTER (ID)
);
INSERT INTO MASTER values (1, 'One');
INSERT INTO MASTER values (2, 'Two');
INSERT INTO MASTER values (3, 'Three');
CREATE SEQUENCE SEQ_DATA_ID;
INSERT INTO DATA values (SEQ_DATA_ID.NEXTVAL, 1, 1.3);
INSERT INTO DATA values (SEQ_DATA_ID.NEXTVAL, 1, 1.5);
INSERT INTO DATA values (SEQ_DATA_ID.NEXTVAL, 1, 1.7);
INSERT INTO DATA values (SEQ_DATA_ID.NEXTVAL, 2, 2.3);
INSERT INTO DATA values (SEQ_DATA_ID.NEXTVAL, 3, 3.14);
INSERT INTO DATA values (SEQ_DATA_ID.NEXTVAL, 3, 3.7);
প্রশ্ন এ :
select NAME from MASTER
where ID = 1
ফলাফল :
| NAME |
--------
| One |
প্রশ্ন বি :
select ID, VALUE from DATA
where MASTER_ID = 1
ফলাফল :
| ID | VALUE |
--------------
| 1 | 1.3 |
| 2 | 1.5 |
| 3 | 1.7 |
অনুসন্ধান সি :
select M.NAME, D.ID, D.VALUE
from MASTER M INNER JOIN DATA D ON M.ID=D.MASTER_ID
where M.ID = 1
ফলাফল :
| NAME | ID | VALUE |
---------------------
| One | 1 | 1.3 |
| One | 2 | 1.5 |
| One | 3 | 1.7 |
অবশ্যই, আমি এগুলি দিয়ে কোনও পারফরম্যান্স পরিমাপ করিনি, তবে কেউ পর্যবেক্ষণ করতে পারেন:
- ক্যোরি এ + বি ক্যোয়ারি সি এর মতো ব্যবহারযোগ্য তথ্যের পরিমাণের পরিমাণ প্রদান করে Qu
- A + বি ক্লায়েন্টকে 1 + 2x3 == 7 "ডেটা সেল" ফিরিয়ে দিতে হবে
- সি ক্লায়েন্টকে 3x3 == 9 "ডেটা সেল" ফিরিয়ে দিতে হবে, কারণ যোগদানের সাথে আমি স্বাভাবিকভাবেই ফলাফলের সেটগুলিতে কিছু অপ্রয়োজনীয়তা অন্তর্ভুক্ত করি।
এ থেকে জেনারালাইজিং (এটি যতদূর পাওয়া যাবে):
একটি যুক্ত প্রশ্নের সাথে সর্বদা একই পরিমাণে তথ্য প্রাপ্ত পৃথক প্রশ্নের চেয়ে বেশি ডেটা ফেরত আসতে হয়। যেহেতু ডাটাবেসটিকে ডেটা একসাথে করতে হয়, তাই বড় ডেটাসেটের জন্য কেউ ধরে নিতে পারে যে পৃথক ব্যক্তির চেয়ে ডেটাবেসকে একক যোগ হওয়া ক্যোয়ারিতে আরও কাজ করতে হয়, যেহেতু (কমপক্ষে) ক্লায়েন্টকে আরও ডেটা ফিরিয়ে দিতে হবে।
এটি কি এখান থেকে অনুসরণ করবে, যখন আমি পর্যবেক্ষণ করি যে ক্লায়েন্টের সাইড কোয়েরিটিকে একাধিক ক্যোয়ারিতে বিভক্ত করা আরও ভাল পারফরম্যান্স অর্জন করে, তবে এটি কেবল যাওয়ার উপায়, বা এর পরিবর্তে এর অর্থ কি আমি যুক্ত হওয়া ক্যোয়ারিতে গোলমাল করেছি?