কোড ফর্ম্যাটিং এসকিউএল কোয়েরি


17

এসকিউএল কোয়েরিগুলি কি আমার বিভিন্ন লাইনে ভাঙা উচিত? উদাহরণস্বরূপ, আমি যে প্রকল্পে কাজ করছি তাতে আমাদের একটি ক্যোয়ারী রয়েছে যা 1600 কলাম নিচ্ছে! 1600 + ট্যাব অক্ষর। আমি এ জাতীয় প্রশ্ন লিখেছি:

   "SELECT bla , bla2 , bla FROM bla " . 
     "WHERE bla=333 AND bla=2" . 
      "ORDER BY nfdfsd ...";

তবে তারা আমাকে তাদের এক লাইনে রাখার দাবি জানিয়েছিল এবং বলেছে যে আমার স্টাইলটি খারাপ ফর্ম্যাটিং। কেন এটা খারাপ অভ্যাস?


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

3
সবকিছু 1 লাইনে থাকা প্রয়োজন? হ্যালো স্ক্রোল বার, বিদায় পঠনযোগ্যতা।
মাইকে 30

1
@ ব্রুসএলডারসন এমন 2000 এর দশকের শুরুর মত শোনায় "গৃহিনী আপনার পিএইচপি অপ্টিমাইজ করার জন্য 3 টি সহজ টিপস আবিষ্কার করেছে" নিবন্ধগুলি। ডাবল কোট এবং / বা কনটেনটেশন সহ আসল লাল পতাকাটি তখনই আসে যখন আপনি এসকিউএল ইঞ্জেকশন আক্রমণ তৈরি না করে সঠিকভাবে ভেরিয়েবলগুলি সন্নিবেশ করা শুরু করেন।
শন ম্যাকসোমিংথিং

1
ফাইলগুলি প্রক্রিয়া করার জন্য কি কোনও "ঘরে" সরঞ্জাম ব্যবহার করা হচ্ছে?
ইয়ান

কেন বুঝতে বোঝা এত কঠিন যে আপনি যতক্ষণ কোডের জন্য অর্থ প্রদান করছেন, আপনি লেখার, পরিষ্কার, ঝরঝরে, সুশৃঙ্খল কোডটি দিয়েছিলেন?
তুলিনাস কর্ডোভা

উত্তর:


33

উত্স নিয়ন্ত্রণের কারণে আমাদের যেখানে ক্লজ বা কমা রয়েছে তার পরে লাইনব্রেক রয়েছে। সুতরাং আপনার উপরের পরিণত হয়

SELECT bla 
     , bla2 
     , bla 
FROM   bla 
WHERE  bla=333 
  AND  bla=2
ORDER  BY nfdfsd
        , asdlfk;

(ট্যাবিং এবং সারিবদ্ধকরণের এখানে কোনও মান নেই, তবে কমা সাধারণত অগ্রণী হয়)

তবুও, কোনও পারফরম্যান্সের পার্থক্য করে না।


5
ভাল ধারণা, এটি একটি সোর্স কন্ট্রোলের ডিফের মধ্যে খুব সুন্দরভাবে একটি ছোট্ট পরিবর্তন আনবে।
কারসন 63000

আমি যেভাবে ব্যবহার করি তেমনই একই বিন্যাসটি, যদিও আমি সাধারণত নির্বাচিত সমস্ত তালিকা একক লাইনে রাখি (বা একাধিক লাইন প্রচুর কলাম থাকলে)
ডিন হার্ডিং

7
এখানে অনুরূপ লেআউট, শীর্ষস্থানীয় কমা হওয়ায় কেবল তফাত, আমাদের এটি শেষে রয়েছে।
ডি ব্ল্যাকবারো

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

2
এই ফর্ম্যাটটি বিকাশের সময় একক আইটেম মন্তব্য করা এবং ক্রম পরিবর্তন করার জন্য কাটা এবং পেস্ট ব্যবহার করা সহজ করে।
ক্রিস নাভা

14

একটি কোয়েরি যা 1600 কলামের শোনায় এটির জন্য ভাল ডিবিএর দ্বারা কিছু গুরুতর পর্যালোচনা দরকার।

যদি কোনও জিজ্ঞাসা জটিল হয় তবে আমি এটি আবদ্ধ করব। যদি এটি সোজা হয় তবে আমি এটি একটি একক লাইন হিসাবে ছেড়ে যাব যদি না এটি খুব দীর্ঘ হয়ে যায়, তবে আমি আবার এটি মোড়ানো শুরু করব।

এটি পরিচালনা ও সামর্থ্য সম্পর্কে যা বোঝা যায় যে এটি মোড়ানো বা মোড়ক না করার কথা তা উড়ে যাওয়ার বিষয়ে সিদ্ধান্ত নেওয়া যেতে পারে, যদি না আপনার সংস্থার সম্পর্কে কিছু কোড ফর্ম্যাটিং নিয়ম থাকে।

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


3
সম্মত, এটি সবই পাঠযোগ্যতার জন্য নেমে আসে। পারফরম্যান্স ইত্যাদির দ্বারা এটি মোটেও আক্রান্ত হয় না, এটি কেবলমাত্র নান্দনিক।
খ্রিস্টান

সম্মত হন যে পারফরম্যান্সটি ভাল যুক্তি হতে পারে না।
টিন ম্যান

আমি জানি না .. কেবলমাত্র আমাকে বলেছে এটি এটিকে এক লাইনে রাখুন, সম্ভবত কারণ তারা করেন
গরিলাএপ

এটি যদি "লিগ্যাসি" কোড হয় তবে তারা সম্ভবত এটি স্পর্শ করতে ভয় পাচ্ছেন। শুধু আস্তে আস্তে পিছনে ফিরে সবকিছু ঠিক হয়ে যাবে।
টিন ম্যান

এর টাটকা কোড ...
গরিলাএপ

8

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


6

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

উদাহরণ:

$a = SQL<<<
    SELECT a, b, c, d
    FROM Foo f
    WHERE f.a = ?
SQL;

কয়েক ডজন লাইন (বা শত) লাইনগুলির প্রশ্নের সাথে কাজ করার সময় ইন্ডেন্টেশন এবং হোয়াইটস্পেস উভয় পাঠ্যটি কার্যক্ষম করে তোলে।


1
পিএইচপি-র জন্য, নওডোকগুলি একক-উদ্ধৃত বিভিন্ন (অর্থাত্ কোনও পরিবর্তনশীল বিকল্প) নয়।
অ্যালান পিয়ার্স

4

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

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

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

1600 কলামের জন্য, আমি গুরুত্ব সহকারে এর জন্য একটি ভিউ তৈরি করার পরামর্শ দিচ্ছি, তার পরিবর্তে

SELECT column1, column2, .... column1600 from X where Y

আপনি পাবেন

যেখানে দেখুন y থেকে * নির্বাচন করুন

আপনার নিজস্ব কোডে আরও অনেক সংক্ষিপ্ত।


+1, এবং আমি কোয়েরিকে একটি সঞ্চিত পদ্ধতিতে তৈরি করার বিষয়েও বিবেচনা করব
ল্যারি কোলেম্যান

1

একটি জটিল ক্যোয়ারি সমস্যা সমাধানের জন্য আমি প্রায়শই @ প্লাসেন্টের দেওয়া ফর্ম্যাটটি ব্যবহার করি, তবে সাধারণত একটি লাইনেই প্রশ্ন থাকে।

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

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

এসকিউএল থেকে বেরিয়ে আপনার কোডে তুচ্ছ যুক্তিযুক্ত মনে হতে পারে এমন স্থানান্তরিত করে আপনি নাটকীয় পারফরম্যান্স বৃদ্ধি প্রদান করতে পারেন - এসকিউএল সাধারণ ক্রিয়াকলাপে দুর্দান্ত।

এটি আপনার সাথে সম্পর্কিত হতে পারে এর সুস্পষ্ট সুবিধা হ'ল আপনার প্রশ্নগুলি খুব কম জটিল এবং পড়তে সহজ - পরিচালনা করা সহজ (164 কলাম নয়) এবং দ্রুত। নির্ধারিতভাবে একটি অলরাউন্ডের জয়।

আশাকরি এটা সাহায্য করবে :)

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