এসকিউএল নির্বাচনের সময়, ডিবি সর্বদা টেবিলের জন্য মেটাডেটা উল্লেখ করতে চলেছে, এটি নির্বাচন করুন, খ, সি এর জন্য নির্বাচন করুন কিনা তা নির্বিশেষে ... কেন? সিস্টেমে টেবিলের কাঠামো এবং বিন্যাসের তথ্য যেখানে রয়েছে সেটিকেই বোকাও।
এটি দুটি কারণে এই তথ্যটি পড়তে হবে। এক, কেবল বিবৃতি সংকলন করতে। এটি খুব কম সময়ে একটি বিদ্যমান টেবিল নির্দিষ্ট করেছেন তা নিশ্চিত করা দরকার make এছাড়াও, শেষবারের মতো একটি বিবৃতি কার্যকর করার পরে ডাটাবেস কাঠামো পরিবর্তিত হতে পারে।
এখন, স্পষ্টতই, ডিবি মেটাডেটা সিস্টেমে ক্যাশে হয়েছে, তবে এটি এখনও প্রক্রিয়াজাত করা দরকার যা করা দরকার।
এরপরে, মেটাডেটা ক্যোয়ারী প্ল্যান উত্পন্ন করতে ব্যবহৃত হয়। প্রতিবার বিবৃতি সংকলিত হওয়ার পরে এটি ঘটে। আবার এটি ক্যাশেড মেটাডেটার বিরুদ্ধে চলে তবে সর্বদা তা হয়ে যায়।
কেবলমাত্র যখন এই প্রক্রিয়াকরণটি করা হয় না যখন DB প্রাক-সংকলিত ক্যোয়ারী ব্যবহার করে, বা কোনও পূর্ববর্তী ক্যোয়ারী ক্যাশে করে। এটি আক্ষরিক এসকিউএল পরিবর্তে বাঁধাই পরামিতি ব্যবহার করার পক্ষে যুক্তি। "টেবিলে কোথা থেকে সিলেক্ট করুন = 1" "টেবিলে কোথা থেকে কী নির্বাচন করুন = থেকে আলাদা?" এবং "1" কলটিতে আবদ্ধ।
ডিবিগুলি সেখানে কাজ করার জন্য পৃষ্ঠার ক্যাশেগুলিতে প্রচুর নির্ভর করে। অনেকগুলি আধুনিক ডিবি যথেষ্ট মেমরির মধ্যে পুরোপুরি ফিট করার জন্য ছোট (বা, সম্ভবত আমার বলা উচিত, আধুনিক স্মৃতি অনেকগুলি ডিবি ফিট করার পক্ষে যথেষ্ট বড়)। তারপরে পিছনের প্রান্তে আপনার প্রাথমিক I / O খরচ লগিং এবং পৃষ্ঠা ফ্লাশ হয় us
তবে, আপনি যদি এখনও আপনার ডিবি-র জন্য ডিস্কটিকে আঘাত করে থাকেন তবে অনেকগুলি সিস্টেমের দ্বারা করা প্রাথমিক অপ্টিমাইজেশন হ'ল টেবিলগুলি না করে সূচকগুলিতে থাকা ডেটাগুলির উপর নির্ভর করা।
যদি তোমার থাকে:
CREATE TABLE customer (
id INTEGER NOT NULL PRIMARY KEY,
name VARCHAR(150) NOT NULL,
city VARCHAR(30),
state VARCHAR(30),
zip VARCHAR(10));
CREATE INDEX k1_customer ON customer(id, name);
তারপরে আপনি যদি "নির্বাচন করুন আইডি, গ্রাহকের নাম WHERE id = 1" করেন তবে খুব সম্ভবত আপনি ডিবি টেবিলের পরিবর্তে সূচি থেকে এই ডেটাটি টানবেন।
কেন? এটি সম্ভবত ক্যোরিয়াকে সন্তুষ্ট করতে সূচকটি ব্যবহার করবে (বনাম একটি টেবিল স্ক্যান), এবং যদিও 'নাম' যেখানে ধারাটিতে ব্যবহার করা হয়নি, সেই সূচীটি এখনও ক্যোয়ারির জন্য সেরা বিকল্প হবে।
এখন ডাটাবেসটিতে ক্যোয়ারীটি পূরণ করার জন্য প্রয়োজনীয় সমস্ত ডেটা রয়েছে, সুতরাং টেবিলের পৃষ্ঠাগুলিকে নিজেরাই আঘাত করার কোনও কারণ নেই। আপনার সূচকে সাধারণ টেবিলে বনাম সারিগুলির উচ্চ ঘনত্ব বেশি হওয়ায় সূচকগুলি কম ডিস্ক ট্র্যাফিকের ফলে ব্যবহার করা হয়।
এটি কয়েকটি ডেটাবেস দ্বারা ব্যবহৃত নির্দিষ্ট অপ্টিমাইজেশান কৌশলটির হ্যান্ড ওয়েভির ব্যাখ্যা। অনেকের কাছে বেশ কয়েকটি অপ্টিমাইজেশন এবং সুর করার কৌশল রয়েছে।
শেষ পর্যন্ত, আপনার নিজের হাতে টাইপ করতে হবে এমন ডায়নামিক ক্যোয়ারীগুলির জন্য নির্বাচন করুন * দরকারী, আমি কখনই এটি "রিয়েল কোড" এর জন্য ব্যবহার করব না। স্বতন্ত্র কলামগুলির সনাক্তকরণ ডিবিকে আরও তথ্য দেয় যা এটি কোয়েরিটি অনুকূলিত করতে ব্যবহার করতে পারে এবং স্কিমা পরিবর্তনের বিরুদ্ধে আপনার কোডগুলিতে আপনাকে আরও ভাল নিয়ন্ত্রণ প্রদান করে etc.
SELECT
প্রশ্নগুলি কার্যকর করা হয় / প্রক্রিয়া করা হয় তা ডেটাবেস থেকে ডাটাবেসের চেয়ে আলাদা।