দেওয়া হয়েছে যে db_select db_query এর চেয়ে অনেক ধীর গতির, কেন আমি এটি ব্যবহার করতে চাই?


69

এর ব্যাকগ্রাউন্ডের জন্য, দয়া করে http://drupal.org/node/1067802 দেখুন

সব কিছু দেওয়া, এমন কোন পরিস্থিতি বিদ্যমান যেখানে আমি db_select () ব্যবহার করতে চাইতে পারি, বা আমার কি সম্পূর্ণ db_query এর উপর নির্ভর করা উচিত?

উত্তর:


88

সিলেটকিউয়ারি ব্যবহারের 5 টি কারণ রয়েছে

  • আপনি বিভিন্ন শর্ত, যোগ, ক্ষেত্র এবং এই জাতীয় সংখ্যার সাথে গতিশীল ক্যোয়ারী তৈরি করছেন। উদাহরণের জন্য ফিল্ড_ড্রেডফিল্ডস () দেখুন ।

  • আপনি তথাকথিত এক্সটেন্ডার ব্যবহার করতে চান । উদাহরণস্বরূপ এক্সটেন্ডাররা হলেন পেজারডেফল্ট (পেজার_কিউরিটি প্রতিস্থাপন করে ) ) এবং টেবিলসোর্ট ( টেবিলসোর্ট_সকিউএল () প্রতিস্থাপন করে )। এগুলি নির্বাচনের ক্ষেত্রে অতিরিক্ত কার্যকারিতা যুক্ত করার অনুমতি দেয়। আরও দেখুন কীভাবে আপনি কাস্টম টেবিলের ডেটা সহ পেজারের সাথে বাছাইযোগ্য টেবিলগুলি তৈরি করেন? । একটি উদাহরণ: নোড_পেজ_ডিফল্ট ()

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

  • আপনি যদি নোড_একসেস সিস্টেমটি কেবল নোডগুলি দেখানোর জন্য ব্যবহার করতে চান / ব্যবহারকারীকে দেখার অনুমতি দেওয়া হয়। আপনার $ ক্যোয়ারীতে কেবল 'নোড_একসেস' ট্যাগ যুক্ত করুন। এটি db_rewrite_sql () প্রতিস্থাপন করে।

  • সিলেক্ট কিওয়ারিতে কয়েকটি বৈশিষ্ট্য রয়েছে যা আপনার কোডটিকে সমস্ত সমর্থিত ডেটাবেসগুলিতে একই কাজ করতে সহায়তা করে। উদাহরণস্বরূপ এখানে নির্বাচনকোচী :: অর্ডারর্যান্ডম () রয়েছে । এবং যদি আপনার মতো একটি শর্ত থাকে - -> শর্ত ('ক্ষেত্র', $ মান, 'LIKE') নিশ্চিত করবে যে এটি সর্বদা একটি সংবেদনশীল তুলনা। ডি In-তে, আপনাকে স্বল্প (যা) ধীর গতির জন্য লোয়ার () ব্যবহার করতে হয়েছিল। কিন্তু আফাইক, এই মুহূর্তে এই দুটিয়ের চেয়ে বেশি কিছু নেই।

যদি এই কারণগুলির মধ্যে কোনও নির্দিষ্ট ক্ষেত্রে প্রযোজ্য না হয় তবে db_query () ব্যবহার করুন।


1
একটি পঞ্চম পয়েন্ট যুক্ত হয়েছে, অর্ডারড্র্যান্ডম () এবং কেস সংবেদনশীল পছন্দ মতো ডাটাবেস পোর্টেবিলিটি বৈশিষ্ট্য।
বেরদির

6
ষষ্ঠ কারণ হিসাবে, আমি ক্রস ডাটাবেস সামঞ্জস্য যুক্ত করব। উদাহরণস্বরূপ, ওরাকল ক্যোরিয়ামে সিনট্যাক্স রয়েছে যা মাইএসকিউএল, পোস্টগ্রিস ইত্যাদি থেকে কিছুভাবে পৃথক হয় একটি db_select () থেকে সঠিক সিনট্যাক্স তৈরি করতে কোড লিখতে অনেক সহজ যখন কিছু-খুব-ওরাকল-সামঞ্জস্যপূর্ণ কোয়েরি কোডটি না হয় সরাসরি db_query () এ ফেলে দেওয়া হয়।
ব্রায়ানভি

9

ডকুমেন্টেশন সম্পর্কেdb_query() বলেন:

এই নির্বাচনটি অনুসন্ধানগুলির জন্য এই ফাংশনটি ব্যবহার করুন যদি এটি কেবল একটি সাধারণ ক্যোয়ারী স্ট্রিং হয়। যদি কলার বা অন্যান্য মডিউলগুলির ক্যোয়ারী পরিবর্তন করতে হয় তবে তার পরিবর্তে db_select () ব্যবহার করুন।


ধন্যবাদ, তবে এটি বেশ অপ্রয়োজনীয়। এটি 'সাধারণ ক্যোয়ারী স্ট্রিং'-এর সংজ্ঞাটি ব্যাখ্যার জন্য বেশ খোলা রাখে। যদি আমি 6 টি যোগ দিয়ে 4 টি টেবিল জুড়ে নির্বাচন করি, তবে এটি এখনও একটি সাধারণ ক্যোয়ারী, না এটি পরিবর্তে db_select () দিয়ে করা উচিত?
ক্রিস কোহেন

3
এটি "সাধারণ ক্যোয়ারী" সম্পর্কে নয়, একটি "সাধারণ ক্যোয়ারী স্ট্রিং " সম্পর্কে এবং সাধারণটির অর্থ হ'ল হার্ডকোডযুক্ত এবং গতিশীল নয়। আরও তথ্যের জন্য আমার উত্তর দেখুন :)
বারডির

9

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


পারফরম্যান্স পার্থক্য এত সহজ নয়; দেখতে db_query এবং db_select কর্মক্ষমতা তুলনা । বার্ডিরের উত্তরে উল্লিখিত বিশেষ বৈশিষ্ট্যগুলির কোনওটির প্রয়োজন না হলে আমি সাধারণত db_quare উপর db_query প্রস্তাব করি।
geerlingguy
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.