স্কিমা পরিবর্তন
- আদেশ অনুসারে আনুন --- কোডটি কলাম # তথ্য পাওয়ার উপায় হিসাবে # টি আনা হচ্ছে, স্কিমাতে পরিবর্তন কলামের সংখ্যাগুলি পুনরায় সামঞ্জস্য করবে। এটি অ্যাপ্লিকেশনকে গোলমাল করবে এবং খারাপ জিনিসগুলি ঘটবে।
- নাম অনুসারে আনুন --- যদি কোডটি নাম অনুসারে কলাম আনছে এবং কোয়েরিতে থাকা
foo
অন্য একটি সারণী একটি কলাম যুক্ত করে foo
, সঠিক foo
কলামটি পাওয়ার চেষ্টা করার সময় এটি যেভাবে পরিচালিত হয় তাতে সমস্যা দেখা দিতে পারে ।
যে কোনও উপায়ে, একটি স্কিমা পরিবর্তন ডেটা উত্তোলনে সমস্যা সৃষ্টি করতে পারে।
আরও বিবেচনা করুন যে কলামটি ব্যবহৃত হচ্ছিল তা যদি টেবিল থেকে সরিয়ে ফেলা হয়। select * from ...
ফলাফল সেট থেকে ডেটা টেনে আনার চেষ্টা করার পরে এখনও ত্রুটিগুলি কাজ করে। যদি কলামটিতে কলামটি সুনির্দিষ্ট করা হয়েছে, সমস্যাটি কী এবং কোথায় তা নিয়ে পরিষ্কার ইঙ্গিত দেওয়ার পরিবর্তে ক্যোয়ারী ত্রুটিযুক্ত হবে।
উপরি উপাত্ত
কিছু কলামের সাথে তাদের সাথে যুক্ত পরিমাণের পরিমাণের পরিমাণ থাকতে পারে। ফিরে নির্বাচন *
টান হবে সব তথ্য। হ্যাঁ, varchar(4096)
এটি এমন 1000 সারি যা আপনার পছন্দ করে না এমন অতিরিক্ত 4 মেগাবাইট ডেটা দেওয়ার দরকার যা আপনি বেছে নিলেন তা কেবল তারের জুড়েই পাঠানো হয়েছে।
স্কিমা পরিবর্তনের সাথে সম্পর্কিত, আপনি প্রথমে টেবিলটি তৈরি করার সময় সেই বার্চারের অস্তিত্ব থাকতে পারে now
অভিপ্রায় জানাতে ব্যর্থ
আপনি যখন পিছনে নির্বাচন করেন *
এবং 20 টি কলাম পান তবে কেবল তার মধ্যে 2 টি প্রয়োজন, আপনি কোডের উদ্দেশ্যটি পৌঁছে দিচ্ছেন না। যে কোয়েরিটি দেখার সময় select *
কেউ কী করে না সেটির গুরুত্বপূর্ণ অংশগুলি কী তা জানতে পারে না। আমি এই কলামগুলি না রেখে আরও দ্রুততর করে তুলতে এই অন্যান্য পরিকল্পনাটি ব্যবহার করার জন্য কি ক্যোরি পরিবর্তন করতে পারি? আমি জানি না কারণ কোয়েরিটি কী দেয় তার উদ্দেশ্য স্পষ্ট নয়।
আসুন এমন কিছু এসকিউএল ফিডলগুলি দেখুন যা এই স্কিমাটি আরও কিছুটা পরিবর্তিত করে explore
প্রথমত, প্রাথমিক ডাটাবেস: http://sqlfiddle.com/#!2/a67dd/1
DDL:
create table one (oneid int, data int, twoid int);
create table two (twoid int, other int);
insert into one values (1, 42, 2);
insert into two values (2, 43);
এসকিউএল:
select * from one join two on (one.twoid = two.twoid);
এবং কলাম আপনাকে ফেরত পেতে হয় oneid=1
, data=42
, twoid=2
, এবং other=43
।
এখন, আমি যদি কোনও টেবিলের সাথে একটি কলাম যুক্ত করি তবে কী হবে? http://sqlfiddle.com/#!2/cd0b0/1
alter table one add column other text;
update one set other = 'foo';
একই ক্যোয়ারী থেকে আমার ফলাফল হিসাবে সামনে দাঁড়িয়ে আছে oneid=1
, data=42
, twoid=2
, এবং other=foo
।
সারণীর একটির পরিবর্তনের ফলে একটি এর মান ব্যাহত হয় select *
এবং হঠাৎ আপনার 'অন্য' এর কোনও সংখ্যার সাথে আবদ্ধকরণ একটি ত্রুটি ফেলতে চলেছে এবং কেন আপনি তা জানেন না।
পরিবর্তে যদি আপনার এসকিউএল বিবৃতি ছিল
select
one.oneid, one.data, two.twoid, two.other
from one join two on (one.twoid = two.twoid);
এক টেবিলের পরিবর্তনে আপনার ডেটা ব্যাহত হবে না। পরিবর্তনের আগে এবং পরিবর্তনের পরে সেই ক্যোয়ারি একই রকম চলে।
ইন্ডেক্সিং
যখন আপনি একটি করেন select * from
আপনি সমস্ত সারি টানছেন শর্তগুলির সাথে মেলে এমন সমস্ত সারণী তৈরি করে। এমনকি আপনি যে টেবিলগুলি সত্যই যত্নবান হন না। যদিও এর অর্থ আরও ডেটা স্থানান্তরিত হয়েছে সেখানে স্ট্যাকটি আরও লুকিয়ে আছে আরও একটি কার্য সম্পাদনের সমস্যা।
ইনডেক্সে। (এসও সম্পর্কিত: নির্বাচিত বিবৃতিতে সূচক কীভাবে ব্যবহার করবেন? )
আপনি যদি প্রচুর কলাম পিছনে টানছেন তবে ডাটাবেস পরিকল্পনা অপ্টিমাইজার কোনও সূচক ব্যবহার করে অবহেলা করতে পারে কারণ আপনার এখনও সেই সমস্ত কলামগুলি যেভাবেই আনতে হবে এবং সূচিটি ব্যবহার করতে আরও সময় লাগবে এবং তারপরে ক্যোয়ারীর সমস্ত কলামগুলি আনতে হবে এটি একটি সম্পূর্ণ টেবিল স্ক্যান করতে চেয়ে হবে।
আপনি যদি কেবল ব্যবহারকারীর শেষ নামটি, বলুন, (যা আপনি অনেক কিছু করেন এবং এর উপর একটি সূচক থাকে) নির্বাচন করে থাকেন তবে ডাটাবেসটি কেবল একটি সূচি স্ক্যান করতে পারে ( পোস্টগ্রিস উইকি সূচকটি কেবল স্ক্যান করে , মাইএসকিএল পূর্ণ টেবিল স্ক্যান বনাম সম্পূর্ণ) সূচক স্ক্যান , সূচি-কেবল স্ক্যান: সারণীর অ্যাক্সেস এড়ানো )।
সম্ভব হলে কেবল সূচকগুলি থেকে পড়া সম্পর্কে বেশ কিছুটা অপ্টিমাইজেশন রয়েছে। প্রতিটি সূচী পৃষ্ঠায় তথ্যটি দ্রুত টানতে পারে কারণ আপনি এর থেকেও কম টানছেন - আপনি এই সমস্ত কলামের জন্য টানছেন না select *
। 100x দ্রুততর ক্রম অনুসারে কোনও সূচি স্ক্যানের ফলাফলগুলি ফিরে পাওয়া সম্ভব (উত্স: নির্বাচন করুন * খারাপ )।
এটি বলছে না যে একটি পূর্ণ সূচক স্ক্যান দুর্দান্ত, এটি এখনও একটি সম্পূর্ণ স্ক্যান - তবে এটি একটি পূর্ণ টেবিল স্ক্যানের চেয়ে ভাল। একবার আপনি এমন সমস্ত উপায়ে তাড়া শুরু করে যা select *
কার্যক্ষমতাতে আঘাত দেয় যা আপনি নতুন সন্ধান করে চলেছেন।
সম্পর্কিত পড়া