কোনও টেবিলে কলামের ক্রমটি নিয়ে চিন্তার কোনও কারণ আছে?


84

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

উত্তর:


94

এসকিএল সার্ভার, ওরাকল এবং মাইএসকিউএল বিস্তৃত কয়েকটি ডেটাবেজে কলামের অর্ডারের বড় পারফরম্যান্সের প্রভাব ছিল। এই পোস্টে থাম্ব সম্পর্কে ভাল নিয়ম আছে :

  • প্রাথমিক কী কলামগুলি প্রথমে
  • পরের বিদেশী কী কলামগুলি।
  • প্রায়শই অনুসন্ধান করা কলামগুলি পরের দিকে
  • পরে প্রায়শই কলামগুলি আপডেট করা হয়
  • সর্বনিম্ন কলামগুলি শেষ।
  • আরও ঘন ঘন ব্যবহারযোগ্য নালাম কলামগুলির পরে স্বল্পতম কমাতে ব্যবহৃত কলামগুলি ব্যবহৃত হয়

পারফরম্যান্সের পার্থক্যের জন্য একটি উদাহরণ হ'ল একটি সূচি প্রদর্শন। ডাটাবেস ইঞ্জিন সূচকে কিছু শর্তের ভিত্তিতে একটি সারি সন্ধান করে এবং একটি সারি ঠিকানা ফিরে পায়। এখন বলুন আপনি স্যামভ্যালু খুঁজছেন এবং এটি এই টেবিলের মধ্যে রয়েছে:

 SomeId int,
 SomeString varchar(100),
 SomeValue int

ইঞ্জিনটি অনুমান করতে হবে সোমারভ্যালু কোথায় শুরু হয়, কারণ সোমারস্ট্রিংয়ের একটি অজানা দৈর্ঘ্য রয়েছে। তবে, আপনি যদি আদেশটি পরিবর্তন করেন:

 SomeId int,
 SomeValue int,
 SomeString varchar(100)

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

সম্পাদনা: এসকিএল সার্ভার 2005 সারি শুরুতে স্থির দৈর্ঘ্যের ক্ষেত্রগুলি সঞ্চয় করে। এবং প্রতিটি সারিতে একটি ভার্চার শুরু করার জন্য একটি উল্লেখ রয়েছে। এটি উপরে উল্লিখিত প্রভাবটিকে পুরোপুরি উপেক্ষা করে। সুতরাং সাম্প্রতিক ডাটাবেসের জন্য, কলাম ক্রমের আর কোনও প্রভাব নেই।


4
@ টপবানা: ভারচর দিয়ে নয়, এগুলিই তাদেরকে সাধারণ চর কলামগুলিতে পৃথক করে।
আল্লায় লালনডে

4
আমি মনে করি না যে টেবিলের কলামগুলির ক্রমটি কোনও তফাত্ করে definitely এটি আপনার তৈরি করা সূচকগুলিতে অবশ্যই একটি পার্থক্য তৈরি করে true
marc_s

4
@ টপবানাানা: আপনি ওরাকলকে জানেন কিনা তা নিশ্চিত নন, তবে এটি কোনও ভিআরএআরসি 2 (100) এর জন্য 100 বাইট রিজার্ভ করে না
কোসনোই

4
@ কাসনোই: সবচেয়ে বেশি প্রভাব পড়েছিল এসকিউএল সার্ভারের উপর, অনেক টুকরো টুকরো কলম্ব সহ একটি টেবিলে।
Andomar

7
এই উত্তরের URL টি আর কাজ করে না, কারও কি বিকল্প আছে?
স্কানলিফ

41

হালনাগাদ:

ইন MySQL, এটি করার একটি কারণ থাকতে পারে।

যেহেতু ভেরিয়েবল ডেটাটাইপগুলি (যেমন VARCHAR) এর মধ্যে ভেরিয়েবল দৈর্ঘ্যের সাথে সঞ্চিত থাকে InnoDBতাই প্রদত্ত একটির অফসেট সন্ধানের জন্য ডাটাবেস ইঞ্জিনকে প্রতিটি সারিতে পূর্ববর্তী সমস্ত কলামগুলি অতিক্রম করতে হবে।

কলামগুলির জন্য প্রভাবটি 17% এর চেয়ে বড় হতে পারে 20

আরও বিস্তারিত জানার জন্য আমার ব্লগে এই এন্ট্রিটি দেখুন:

ইন Oracle, পিছনে থাকা NULLকলামগুলি কোনও স্থান খায় না, এজন্য আপনার সর্বদা সেগুলি টেবিলের শেষে রাখা উচিত।

এছাড়াও Oracleএবং এর SQL Serverমধ্যেও, একটি বৃহত সারির ক্ষেত্রে, একটি ROW CHAININGঘটতে পারে।

ROW CHANING একটি সারি বিভক্ত করা হচ্ছে যা একটি ব্লকের সাথে মানানসই নয় এবং এটি লিঙ্কযুক্ত তালিকার সাথে সংযুক্ত একাধিক ব্লকের উপর ছড়িয়ে পড়ে।

প্রথম ব্লকের সাথে মানানসই ট্রেলিং কলামগুলি পড়ার জন্য লিঙ্কযুক্ত তালিকায় ট্র্যাভারিংয়ের প্রয়োজন হবে, যার ফলে অতিরিক্ত I/Oক্রিয়াকলাপ হবে।

দেখুন এই পৃষ্ঠার এর দৃষ্টান্তের জন্য ROW CHAININGOracle:

এজন্য আপনার প্রায়শই ব্যবহার করা কলামগুলি টেবিলের শুরুতে রাখা উচিত এবং আপনি যে কলামগুলি প্রায়শই ব্যবহার করেন না সেগুলি বা NULLটেবিলের শেষে থাকা কলামগুলি ব্যবহার করা উচিত ।

গুরুত্বপূর্ণ তথ্য:

আপনি যদি এই উত্তরটি পছন্দ করেন এবং এটির জন্য ভোট দিতে চান তবে দয়া করে তার @Andomarউত্তরটির জন্যও ভোট দিন ।

তিনি একই উত্তর দিয়েছিলেন, তবে মনে হয় অকারণে তা হ্রাস পেয়েছে।


4
সুতরাং আপনি বলছেন এটি ধীর হবে: tinyTable.id, tblBIG.first Column নির্বাচন করুন, tblBIG.lastColumn tinyTable ভিতরের থেকে tblBIG টিনিটিবেবল উপর যোগ করুন tblBIG.fkID tblBIG রেকর্ডগুলি 8KB এর বেশি হলে (সেক্ষেত্রে কিছু সারি চেইন ঘটবে) ) এবং যোগদানটি সমকালীন হবে ... তবে এটি দ্রুত হবে: tinyTable.id, tblBIG.first Column টিনিটিবেবল অভ্যন্তরীণ থেকে tblBIG to tinyTable.id = tblBIG.fkID নির্বাচন করুন যেহেতু আমি অন্য ব্লকগুলিতে কলামটি ব্যবহার করব না লিঙ্কযুক্ত তালিকাটি অতিক্রম করার দরকার কি আমি এই অধিকার পেয়েছি?
jfrobishow

4
আমি পেয়েছি মাত্র 6%, এবং এটি কোল 1 বনাম অন্য যে কোনও কলামের জন্য।
রিক জেমস

6

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

সাধারণভাবে, এটি কোনও পার্থক্য করা উচিত নয়। আপনি যেমনটি বলেছেন, প্রশ্নগুলি সর্বদা "নির্বাচন করুন *" থেকে ক্রম উপর নির্ভর করে কলামগুলি নিজেরাই নির্দিষ্ট করা উচিত। আমি এমন কোনও ডিবি জানি না যা সেগুলি পরিবর্তন করার অনুমতি দেয় ... ভাল, আপনি জানেন না যতক্ষণ না মাইএসকিউএল এটির অনুমতি দিয়েছে।


4
তিনি ঠিক বলেছেন, ওরাকল কিছু বাইট সংরক্ষণ করে ডিস্কে নুল কলামগুলি অনুসরণ করে না does দেখুন dba-oracle.com/oracle_tips_ault_nulls_values.htm
Andomar

একেবারে, এটি ডিস্কের আকারে একটি বড় পার্থক্য করতে পারে
অ্যালেক্স

এই লিঙ্কটি কি আপনি বোঝাতে চেয়েছিলেন? এটি কলাম ক্রমের পরিবর্তে সূচকগুলিতে নালকে সূচিহীন করার সাথে সম্পর্কিত।
আরাকনিড

ভুল লিঙ্ক, এবং আসলটি খুঁজে পাচ্ছে না। যদিও আপনি এটির জন্য গুগল করতে পারেন, উদাহরণস্বরূপ tlingua.com/new/articles/Chapter2.html
Andomar

5

কিছু খারাপভাবে লিখিত অ্যাপ্লিকেশনগুলি কলাম নামের পরিবর্তে কলাম আদেশ / সূচকের উপর নির্ভরশীল। তাদের হওয়া উচিত নয়, তবে এটি ঘটে। কলামগুলির ক্রম পরিবর্তন করা যেমন অ্যাপ্লিকেশনগুলিকে ভেঙে দেয়।


4
অ্যাপ্লিকেশন বিকাশকারীরা যা তাদের কোডটি একটি টেবিলের কলাম ক্রমের উপর নির্ভর করে তাদের অ্যাপ্লিকেশনগুলি ভেঙে ফেলতে চায় D কিন্তু অ্যাপ্লিকেশন ব্যবহারকারীরা আউটজেটের প্রাপ্য নয়।
spencer7593

4

আপনি টাইপ করতে হবে আউটপুট পড়ার যোগ্যতা:

select * from <table>

আপনার ডাটাবেস পরিচালন সফ্টওয়্যার?

এটি একটি খুব উদাসীন কারণ, তবে এই মুহূর্তে আমি আর কিছু ভাবতে পারি না।


4

না, কোনও এসকিউএল ডাটাবেস সারণীতে কলামগুলির ক্রম সম্পূর্ণ অপ্রাসঙ্গিক - প্রদর্শন / মুদ্রণের উদ্দেশ্যে ব্যতীত। কলামগুলিকে পুনরায় অর্ডার করার কোনও অর্থ নেই - বেশিরভাগ সিস্টেমে এমনকি এটি করার কোনও উপায়ও সরবরাহ করা হয় না (পুরানো টেবিলটি বাদ দিয়ে নতুন কলামের ক্রম সহ এটি পুনরুদ্ধার করা)।

মার্ক

সম্পাদনা: সম্পর্কিত ডেটাবেজে উইকিপিডিয়া এন্ট্রি থেকে, এখানে আমার কাছে প্রাসঙ্গিক অংশটি পরিষ্কারভাবে দেখায় যে কলাম আদেশটি কখনই উদ্বেগের বিষয় নয়:

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


4
আমি দেখেছি কলামের পার্থক্যটি আমার নিজের চোখ দিয়ে একটি বড় প্রভাব ফেলেছে, তাই আমি বিশ্বাস করতে পারি না এটি সঠিক উত্তর। যদিও ভোটদান এটি প্রথম রাখে। এইচআরএম
অ্যান্ডোমার 19

কি এসকিউএল পরিবেশ হতে হবে?
marc_s

4
সর্বাধিক প্রভাব আমি দেখেছি সিকিএল সার্ভার 2000, যেখানে একটি বিদেশী কী এগিয়ে নিয়ে যাওয়া কিছু প্রশ্ন 2 থেকে 3 বার বাড়িয়েছিল। এই প্রশ্নগুলির বিদেশী কীতে শর্তযুক্ত বড় টেবিল স্ক্যান (1 এম + সারি) ছিল।
Andomar

4
আরডিবিএমএস আপনি পারফরম্যান্সের জন্য যত্ন না নিলে টেবিল অর্ডারের উপর নির্ভর করে না । কলামগুলির ক্রমের জন্য বিভিন্ন বাস্তবায়নের ক্ষেত্রে বিভিন্ন কার্যকারিতার জরিমানা থাকবে। এটি বিশাল হতে পারে বা এটি ক্ষুদ্র হতে পারে, এটি বাস্তবায়নের উপর নির্ভর করে। টিপলস তাত্ত্বিক, আরডিবিএমএস ব্যবহারিক।
এস্তেবান কাবার

4
-1। আমি যে সমস্ত রিলেশনাল ডাটাবেস ব্যবহার করেছি তার কোনও স্তরে কলাম ক্রম রয়েছে। আপনি যদি কোনও টেবিল থেকে * নির্বাচন করেন তবে কলামগুলি এলোমেলো ক্রমে ফিরে আসার ঝোঁক নেই। এখন অন ডিস্ক বনাম প্রদর্শন একটি ভিন্ন বিতর্ক। এবং গণিতের তত্ত্বকে ডাটাবেসের ব্যবহারিক বাস্তবায়নের বিষয়ে একটি অনুমানের ব্যাক আপ করা কেবল বাজে কথা।
ডগডব্লিউ

2

ডিবাগিং এবং ফায়ার-ফাইটিংয়ের জন্য আমি একমাত্র কারণটি ভাবতে পারি। আমাদের একটি টেবিল রয়েছে যার "নাম" কলামটি তালিকার দশম দশকের দিকে প্রদর্শিত হবে। আপনি যখন টেবিল থেকে দ্রুত নির্বাচন করুন * (আইডিতে (১,২,৩) করেন তখন ব্যথা হয় এবং তারপরে নামগুলি দেখতে আপনাকে স্ক্রোল করতে হয়।

কিন্তু এটি সম্পর্কে।


1

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


আমরা সাধারণত শেষ কলামটি "তৈরি করা" হওয়ার সাথে শুরু করি (সারিটি সন্নিবেশ করা হওয়ার জন্য টাইমস্ট্যাম্প)। পুরানো সারণীগুলির সাথে অবশ্যই এটির পরে বেশ কয়েকটি কলাম যুক্ত হতে পারে ... এবং আমাদের মাঝে মাঝে টেবিল রয়েছে যেখানে একটি যৌগিক প্রাথমিক কীটি একটি সরোগেট কীতে পরিবর্তন করা হয়েছিল তাই প্রাথমিক কীটি বেশ কয়েকটি কলামে।
আরাকনিদ

1

আপনি যদি ইউনিয়নকে অনেক বেশি ব্যবহার করতে যাচ্ছেন, যদি তাদের ক্রম সম্পর্কিত কোনও কনভেনশন থাকে তবে এটি মেলানো কলামগুলি আরও সহজ করে তোলে।


আপনার ডাটাবেসের মতো শব্দগুলির স্বাভাবিককরণ প্রয়োজন! :)
জেমস এল

আরে! এটি আবার নিয়ে যাও, আমি আমার ডাটাবেসটি বলিনি। :)
আল্লায় লালোন্ডে

) দেখুন, সেখানে বৈধ কারণে ইউনিয়ন ব্যবহার করতে হয় postgresql.org/docs/current/static/ddl-partitioning.html এবং stackoverflow.com/questions/863867/...
এস্তেবান শিক্ষকঃ কুবের

আপনি কি 2 টি টেবিলের কলামের ক্রম দিয়ে ইউনিয়ন করতে পারেন বিভিন্ন ক্রমে?
মনিকা হেডনেক

হ্যাঁ, টেবিলগুলি জিজ্ঞাসা করার সময় আপনার কেবল কলামগুলি স্পষ্টভাবে উল্লেখ করতে হবে। A [a, b] B [b, a] টেবিল সহ, এর অর্থ (নির্বাচন করুন AA, আব্রাহীন থেকে A) ইউনিয়ন (নির্বাচন করুন B, BB থেকে B) ইনসাইড (নির্বাচন করুন থেকে A) ইউনিয়ন (নির্বাচন করুন * বি থেকে নির্বাচন করুন)।
আল্লায় লালনোদে

1

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

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

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


1

সুস্পষ্ট পারফরম্যান্স টিউনিংয়ের বাইরে, আমি কেবল একটি কর্নারের কেসে গিয়েছি যেখানে কলামগুলি পুনরায় অর্ডার করার ফলে একটি (পূর্ববর্তী কার্যকরী) স্কল স্ক্রিপ্টটি ব্যর্থ হয়েছিল।

ডকুমেন্টেশন থেকে "TIMESTAMP এবং DATETIME কলামগুলির এই ব্যতিক্রম ব্যতীত স্পষ্টভাবে সুনির্দিষ্টভাবে উল্লেখ না করা থাকলে কোনও স্বয়ংক্রিয় বৈশিষ্ট্য নেই: ডিফল্টরূপে, প্রথম TIMESTAMP কলামে উভয়ই DEFULT CURRENT_TIMESTAMP এবং UPDATE CURRENT_TIMESTAMP উভয়ই থাকে যদি না বর্ণিত হয় তবে" https: //dev.mysql .com / ডক / রেফম্যান / 5.6 / এন / টাইমস্ট্যাম্প-ইনিশিয়ালাইজেশন। html

সুতরাং, একটি আদেশ ALTER TABLE table_name MODIFY field_name timestamp(6) NOT NULL; ক্ষেত্রটি যদি কোনও টেবিলে প্রথম টাইমস্ট্যাম্প (বা ডেটটাইম) হয় তবে অন্যথায় নয় a

স্পষ্টতই, আপনি একটি ডিফল্ট মান অন্তর্ভুক্ত করতে পরিবর্তিত কমান্ডটি সংশোধন করতে পারেন, কিন্তু কলামটি পুনরায় অর্ডারিংয়ের কারণে কাজ করা একটি ক্যোয়ারী আমার মাথাকে আঘাত করেছে the


0

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


0

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


0

2002 সালে, বিল থারস্টেইনস হিউলেট প্যাকার্ড ফোরামগুলিতে পোস্ট করেছিলেন যাতে কলামগুলি পুনরায় সাজিয়ে মাইএসকিউএল অনুসন্ধানগুলি অনুকূল করতে পারে। তার পোস্টটি তখন থেকে ইন্টারনেটে কমপক্ষে একশ বার আক্ষরিক অর্থে অনুলিপি করে আটকানো হয়েছে, প্রায়শই বিনা প্রশংসা ছাড়াই। তাকে ঠিক উদ্ধৃত করা ...

থাম্বের সাধারণ নিয়ম:

  • প্রাথমিক কী কলামগুলি প্রথমে।
  • পরের বিদেশী কী কলামগুলি।
  • প্রায়শই অনুসন্ধান করা কলামগুলি পরবর্তী next
  • পরে প্রায়শই আপডেট হওয়া কলাম।
  • সর্বনিম্ন কলামগুলি শেষ।
  • আরও ঘন ঘন ব্যবহৃত নালাম কলামগুলির পরে স্বল্প-ব্যবহৃত নালাম কলামগুলি।
  • কয়েকটি অন্যান্য কলাম সহ নিজস্ব টেবিলের মধ্যে ব্লবগুলি।

সূত্র: এইচপি ফোরাম

কিন্তু সেই পোস্টটি ২০০২ সালে ফিরে করা হয়েছিল! এই পরামর্শটি মাইএসকিউএল সংস্করণ 3.23 এর জন্য ছিল, মাইএসকিউএল 5.1 প্রকাশের ছয় বছরেরও বেশি সময় আগে। এবং কোন উল্লেখ বা উদ্ধৃতি নেই। তো, বিল ঠিক ছিল? এবং স্টোরেজ ইঞ্জিনটি ঠিক কীভাবে এই স্তরে কাজ করে?

  1. হ্যাঁ, বিল ঠিক ছিল।
  2. এটি সমস্ত শৃঙ্খলাবদ্ধ সারি এবং মেমরি ব্লকগুলির বিষয়ে নেমে আসে।

ওরাকল-প্রত্যয়িত পেশাদার মার্টিন জাহনকে ওরাকল রো চেইনিং ও মাইগ্রেশন সম্পর্কিত সিক্রেটস সম্পর্কিত একটি নিবন্ধে উদ্ধৃত করার জন্য ...

শিকলযুক্ত সারিগুলি আমাদের আলাদাভাবে প্রভাবিত করে। এখানে, এটি আমাদের প্রয়োজনীয় ডেটার উপর নির্ভর করে। আমাদের যদি দুটি কলামের সাথে একটি সারি থাকে যা দুটি ব্লকে ছড়িয়ে ছিল, ক্যোয়ারী:

SELECT column1 FROM table

যেখানে কলাম 1 ব্লক 1 এ রয়েছে, কোনও «টেবিল আনতে অবিরত সারি cause সৃষ্টি করবে না» এটি আসলে কলাম 2 পেতে হবে না, এটি শৃঙ্খলাবদ্ধ সারির সমস্ত পথ অনুসরণ করবে না। অন্যদিকে, আমরা যদি জিজ্ঞাসা করি:

SELECT column2 FROM table

এবং কলাম 2 সারি শৃঙ্খলার কারণে ব্লক 2 এ রয়েছে, তবে আপনি আসলে দেখতে পাবেন একটি টেবিল আনতে অবিরত সারি »

বাকি নিবন্ধটি বরং একটি ভাল পড়া! তবে আমি এখানে কেবল সেই অংশটি উদ্ধৃত করছি যা আমাদের প্রশ্নের সাথে সরাসরি প্রাসঙ্গিক।

আরও 18 বছর পরে, আমি এটি বলতে হবে: ধন্যবাদ, বিল!

ডেটা ব্লকে একটি মাইএসকিউএল সারি ম্যাপিং

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