লোকেরা এসকিউএল কার্সারকে এত ঘৃণা করে কেন? [বন্ধ]


127

আমি ওভারহেড এবং অসুবিধার কারণে একটি কার্সার ব্যবহার করা এড়াতে ইচ্ছুক বুঝতে পারি, তবে দেখে মনে হচ্ছে এমন কিছু মারাত্মক কার্সর-ফোবিয়া-ম্যানিয়া চলছে যেখানে লোকেরা ব্যবহার না করা এড়াতে যথেষ্ট দীর্ঘায়িত হচ্ছে।

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

উন্মাদ বিদ্বেষের এই স্তরের কারণ কী? কিছু 'স্বীকৃত কর্তৃপক্ষ' কার্সারদের বিরুদ্ধে ফতোয়া জারি করেছে? শিশুদের নৈতিকতা বা কোন কিছুর নৈতিকতাকে দূষিত করে এমন অভিশাপের হৃদয়ে কি কিছু অবর্ণনীয় মন্দ কাজ করে?

উইকির প্রশ্ন, জবাবের চেয়ে উত্তরের প্রতি আগ্রহী।

সম্পর্কিত তথ্য:

এসকিউএল সার্ভার ফাস্ট ফরোয়ার্ড কার্সার

সম্পাদনা: আমাকে আরও সুনির্দিষ্ট করে বলুন: আমি বুঝতে পেরেছি যে সাধারণ রিলেশনাল অপারেশনের পরিবর্তে কার্সার ব্যবহার করা উচিত নয় ; এটি একটি বুদ্ধিমান আমি যেটা বুঝতে পারি না তা হ'ল লোকেরা কার্সার এড়াতে তাদের পথ থেকে দূরে চলেছে যেমন তাদের কোটি বা অন্য কিছু রয়েছে, এমনকি যখন কার্সারটি সহজ এবং / অথবা আরও কার্যকর সমাধান হয়। এটি অযৌক্তিক ঘৃণা যা আমাকে বিস্মিত করে, স্পষ্ট প্রযুক্তিগত দক্ষতা নয়।


1
আমি মনে করি যে আপনার সম্পাদনাটি এটি সব বলেছে ... প্রায় সব পরিস্থিতিতেই (যে আমি সামনে এসেছি) আরও ভাল পারফরম্যান্স সেট ভিত্তিক পরিস্থিতির সাথে কার্সার প্রতিস্থাপনের একটি উপায় রয়েছে। আপনি নন-ব্রেইনার বলছেন, তবে আপনি ভিন্নতাটি বুঝতে পারেন।
স্টিংজি জ্যাক

7
আমি এই প্রশ্নের ট্যাগ পছন্দ!
sep332

2
পুনরাবৃত্ত সিটিই সীমাবদ্ধতা সম্পর্কে অংশটি 32বোকা। সম্ভবত আপনি ও রিকার্সিভ ট্রিগারের চিন্তা করা হয় সর্বোচ্চ @@NESTLEVELএর 32। এটি OPTION (MAXRECURSION N)ডিফল্ট 100এবং 0অর্থ সীমাহীন সহ ক্যোয়ারিতে সেট করা যেতে পারে ।
মার্টিন স্মিথ

@ মার্টিনস্মিত: ডিফল্ট সীমা এখন 100, এবং সর্বাধিক 32 কে sql-server-helper.com/error-messages/msg-310.aspx
স্টিভেন এ। লো

না, এটি এখনও ঠিক একইভাবে যখন আমি আমার মন্তব্য করেছি এবং এসকিউএল সার্ভারের সমস্ত সংস্করণে যা পুনরাবৃত্ত সিটিই সমর্থন করে। আপনার লিঙ্কটি যেমন বলে "যখন 0 নির্দিষ্ট করা থাকে তখন কোনও সীমা প্রয়োগ করা হয় না।"
মার্টিন স্মিথ

উত্তর:


74

কার্সার সহ "ওভারহেড" কেবলমাত্র API এর অংশ part আরডিবিএমএসের অংশগুলি হুডের নীচে কীভাবে কাজ করে তা হ'ল কার্সাররা। প্রায়শই CREATE TABLEএবং INSERTআছে SELECTবিবৃতি, এবং বাস্তবায়ন সুস্পষ্ট অভ্যন্তরীণ কার্সার বাস্তবায়ন।

উচ্চ-স্তরের "সেট-ভিত্তিক অপারেটরগুলি" ব্যবহার করে কার্সার ফলাফলকে একক ফলাফলের সেটগুলিতে বান্ডিল করা হয়, যার অর্থ কম পিছু পিছু পিছু পিছু।

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

ধীর সমস্যা

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

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

এই বিভ্রান্তি প্রায়শই কার্সারের একটি অভিযুক্তির দিকে নিয়ে যায়। তবে এটি কার্সার নয়, এটি কার্সরের অপব্যবহার যা সমস্যা।

আকার ইস্যু

সত্যই মহাকাব্যিক ফলাফলের সেটগুলির জন্য (যেমন, কোনও ফাইলে একটি টেবিল ডাম্পিং), কার্সারগুলি প্রয়োজনীয়। সেট-ভিত্তিক ক্রিয়াকলাপগুলি মেমরির একক সংগ্রহ হিসাবে সত্যই বড় ফলাফল সেটগুলি বাস্তবায়িত করতে পারে না।

বিকল্প

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


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

@ রিচার্ড টি: আমি আরডিবিএমএস উত্স সম্পর্কে দ্বিতীয় হাতের তথ্য বন্ধ করছি; আমি বিবৃতি সংশোধন করব।
এস.লোট

2
"আমি সত্যই মহাকাব্যীয় নেস্টেড লুপ ক্রিয়াকলাপ প্রচুর এবং প্রচুর কার্সর হিসাবে লেখা আছে seen" আমি তাদেরও দেখতে থাকি। এটা বিশ্বাস করা কঠিন।
রাসেলএইচ

41

কার্সরগুলি একটি সেট-ভিত্তিক পরিবেশে অতিরিক্তভাবে একটি পদ্ধতিগত মানসিকতা প্রয়োগ করে তোলে।

তারা হয় ধীর !!!

এসকিউএলটিম থেকে :

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


6
এই নিবন্ধটি 7 বছরের পুরনো, আপনি কি মনে করেন যে ইতিমধ্যে কিছু পরিবর্তিত হতে পারে?
স্টিভেন এ। লো

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

আপডেট করা নিবন্ধটি আপেক্ষিক গতির পরিমাপগুলি সংশোধন করে না, তবে এটি কিছু ভাল অপ্টিমাইজেশন এবং বিকল্প সরবরাহ করে। নোট করুন যে মূল নিবন্ধটিতে বলা হয়েছে যে কার্সারগুলি লুপগুলির তুলনায় 50 গুণ বেশি গতিযুক্ত, যা আকর্ষণীয়
স্টিভেন এ লো।

6
@ বল্টবাইট: আমি ব্যক্তিগতভাবে মনে করি আপনি যদি কম্বল দাবি করে থাকেন তবে আপনি সত্যিই 45 বছর বয়সী হতে পারবেন না :
স্টিভেন এ লো লো

4
@ বল্টবাইট: আপনি বাচ্চারা আমার লন থেকে নামলেন!
স্টিভেন এ লো।

19

উপরে একটি উত্তর রয়েছে যা বলে যে "এসকিউএল সার্ভারের অভ্যন্তরে ডেটা অ্যাক্সেস করার সবচেয়ে সহজ উপায় কার্সার ... সেট বেসড বিকল্পগুলির চেয়ে কার্সারগুলি ত্রিশ গুণ বেশি ধীর হয় er"

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

অন্যান্য ডাটাবেস ক্রিয়াকলাপের অভাবে, সেট-ভিত্তিক ক্রিয়াকলাপ সর্বজনীনভাবে দ্রুত হয়। উত্পাদন ব্যবস্থায়, এটি নির্ভর করে।


1
নিয়ম প্রমাণিত ব্যতিক্রম মত শোনাচ্ছে।
জোয়েল কোহর্ন

6
@ [জোয়েল কোহোর্ন]: আমি কখনও এই কথাটি বুঝতে পারি নি।
স্টিভেন এ লো।

2
@ [স্টিভেন এ। লো] বাক্যগুলি.আর.কিউ / স্মৃতিশক্তি / এক্সপ্রেশন- থ্যাট- প্রোভেনস -টেল- রোল এইচটিএমএল "কী বাদ পড়েছে" হিসাবে ব্যতিক্রমটি বোঝেন এবং নোট করুন যে এখানে নিয়মটি বেশিরভাগ পরিস্থিতিতে কার্সারগুলিতে "এর মতো" are খারাপ "।
ডেভিড লে

1
@ ডেলম: লিঙ্কটির জন্য ধন্যবাদ, এখন আমি এই শব্দটি আরও কম বুঝি!
স্টিভেন এ। লো

5
@ [স্টিভেন এ। লো] মূলত এটি বলছে যে আপনি যদি একটি সাবকেস দিয়ে "একটি নিয়ম ভঙ্গ করেন" তবে অবশ্যই একটি নিয়ম ভঙ্গ করতে হবে, নিয়মটি অমান্য করতে হবে। লিঙ্ক থেকে উদাহরণ: ( "আমরা যদি মত একটি বিবৃতি 'এন্ট্রি রবিবার চার্জ মুক্ত' আছে, আমরা যুক্তিসঙ্গতভাবে অনুমান করতে পারেন, একটি সাধারণ নিয়ম অনুযায়ী, এন্ট্রির জন্য অভিযুক্ত করা হয়।")
ভেজে

9

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

সর্বাধিক গুরুতর এসকিউএল বইয়ে কার্সার ব্যবহারের নির্দেশ দেওয়ার একটি অধ্যায় অন্তর্ভুক্ত; ভাল-লিখিত এগুলি পরিষ্কার করে দেয় যে কার্সারগুলির তাদের জায়গা রয়েছে তবে সেট-ভিত্তিক ক্রিয়াকলাপগুলির জন্য ব্যবহার করা উচিত নয়।

স্পষ্টতই এমন পরিস্থিতি রয়েছে যেখানে কার্সারগুলি সঠিক পছন্দ বা কমপক্ষে একটি সঠিক পছন্দ।


9

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


8

ওরাকলে পিএল / এসকিউএল কার্সারগুলির ফলস্বরূপ সারণি লকগুলি আসবে না এবং বাল্ক সংগ্রহ / বাল্ক সংগ্রহের ব্যবহার সম্ভব।

ওরাকল 10 এ প্রায়শই ব্যবহৃত নিহিত কার্সার

  for x in (select ....) loop
    --do something 
  end loop;

এক সাথে সুস্পষ্টভাবে 100 টি সারি আনে। সুস্পষ্ট বাল্ক সংগ্রহ / বাল্ক আনতেও সম্ভব।

তবে পিএল / এসকিউএল কার্সারগুলি একটি শেষ অবলম্বনের কিছু, আপনি সেট-ভিত্তিক এসকিউএল নিয়ে কোনও সমস্যা সমাধান করতে অক্ষম হলে এগুলি ব্যবহার করুন।

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


6

সাধারণভাবে, কারণ একটি সম্পর্কিত সম্পর্কিত ডাটাবেসে, কার্সার ব্যবহার করে কোডের কার্য সম্পাদন হ'ল সেট-ভিত্তিক ক্রিয়াকলাপগুলির চেয়ে খারাপের ক্রম।


আপনার কি এর জন্য একটি মানদণ্ড বা রেফারেন্স আছে? আমি এরকম কোনও কঠোর পারফরম্যান্সের অবক্ষয় লক্ষ্য করি নি ... তবে সম্ভবত আমার টেবিলগুলিতে এটির জন্য যথেষ্ট পরিমাণ সারি নেই (সাধারণত এক মিলিয়ন বা তারও কম)?
স্টিভেন এ। লো

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

3
আমার মনে আছে আমি প্রথম এসকিউএল করলাম, আমাদের একটি মেইনফ্রেম থেকে একটি এসকিউএল সার্ভার ডাটাবেসে একটি 50k দৈনিক ডেটা ফাইল আমদানি করতে হয়েছিল ... আমি একটি কার্সার ব্যবহার করেছি এবং আবিষ্কার করেছি যে, আমদানিটি কার্সার ব্যবহার করে প্রায় 26 ঘন্টা সময় নিচ্ছে .. .আমি যখন সেট-বেসড অপারেশনে পরিবর্তিত হয়েছি, প্রক্রিয়াটি 20 মিনিট সময় নেয়।
চার্লস ব্রেটানা

6

উপরের উত্তরগুলি লক করার যথেষ্ট গুরুত্ব দেয়নি। আমি কার্সারগুলির একটি বড় অনুরাগী নই কারণ তাদের প্রায়শই টেবিল স্তরের লক হয়।


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

?? এটি আপনার লক করার কৌশলটি নয় কার্সার নিয়ে সমস্যা। এমনকি একটি নির্বাচনী বিবৃতি পঠিত লকগুলি যুক্ত করবে।
অ্যাডাম

3

এটির জন্য প্রয়োজনীয় যে আমি পড়লাম যে "এক" স্থানটি একটি কার্সার তার সেট-ভিত্তিক সমমর্যাদায় সঞ্চালন করবে এটি মোট চলমান। একটি ছোট টেবিলের উপরে কলামগুলির দ্বারা ক্রমের উপরে সারিগুলি যোগ করার গতি সেট-ভিত্তিক অপারেশনকে সমর্থন করে তবে টেবিলটি সারি আকারে বৃদ্ধি পাওয়ায় কার্সার দ্রুততর হয়ে উঠবে কারণ এটি কেবল চলমান মোট মানটিকে পরবর্তী পাশের দিকে নিয়ে যেতে পারে লুপ. এখন যেখানে আপনার মোট রান করা উচিত তা ভিন্ন যুক্তি ...


1
যদি আপনি "চলমান মোট" কোনও প্রকারের (মিনিট, সর্বাধিক, যোগফল) একত্রিত করে বোঝাতে চান তবে যে কোনও উপযুক্ত ডিবিএমএস কেবলমাত্র ইঞ্জিনটিতে সঞ্চালিত হওয়ার কারণে এবং ক্লায়েন্ট-সাইড, কার্সার ভিত্তিক সমাধানের প্যান্টগুলিকে পরাজিত করবে and কোনও ক্লায়েন্ট নেই <--> সার্ভার ওভারহেড। সম্ভবত এসকিউএল সার্ভার সক্ষম নয়?
রিচার্ড টি

1
@ [রিচার্ড টি]: আমরা সার্ভার-সাইড কার্সারগুলি নিয়ে আলোচনা করছি, যেমন কোনও সঞ্চিত পদ্ধতিতে ক্লায়েন্ট-সাইড কার্সার নয়; বিভ্রান্তির জন্য দুঃখিত!
স্টিভেন এ লো।

2

আমি এই পৃষ্ঠায় নিবন্ধের সাথে একমত:

http://weblogs.sqlteam.com/jeffs/archive/2008/06/05/sql-server-cursor-removal.aspx


ভাল নিবন্ধ; লেখকের আরও উল্লেখ করা উচিত ছিল যে লুপগুলি কার্সারের তুলনায় অনেক কম দক্ষ
স্টিভেন এ লো লো

2

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


2
এসকিউএল কার্সার ছাড়াই ডিবাগ করার জন্য বেদনাদায়ক। এমএস এসকিউএল স্টেপ-থ্রু সরঞ্জামগুলি ভিজ্যুয়াল স্টুডিওতে আমার পছন্দ হয় না বলে মনে হয় না (তারা অনেকটা ঝুলিয়ে রাখে, বা ব্রেকপয়েন্টগুলিতে মোটেও ট্রিপ করে না), তাই আমি সাধারণত PRINT বিবৃতিতে কমে যাই ;-)
স্টিভেন এ লো লো

1

আপনি কি সেই কার্সার উদাহরণ পোস্ট করতে পারেন বা প্রশ্নের লিঙ্ক করতে পারেন? পুনরাবৃত্ত সিটিইর চেয়ে আরও ভাল উপায় সম্ভবত আছে।

অন্যান্য মন্তব্য ছাড়াও, কার্সারগুলি অনুপযুক্তভাবে ব্যবহার করা হলে (যা প্রায়শই হয়) অপ্রয়োজনীয় পৃষ্ঠা / সারি লকগুলি সৃষ্টি করে।


1
আরও ভাল উপায় আছে - একটি ফ্রেইকিন 'কার্সার ;-)
স্টিভেন এ। লো

1

লোকদের "পাগল" বলার চেয়ে আপনি দ্বিতীয় অনুচ্ছেদের পরে আপনার প্রশ্নটি সম্ভবত শেষ করতে পারতেন কারণ তারা আপনার চেয়ে আলাদা দৃষ্টিভঙ্গি রাখে এবং অন্যথায় পেশাদারদের ঠাট্টা করার চেষ্টা করে যাঁরা যেভাবে করেন সে অনুভব করার জন্য খুব ভাল কারণ থাকতে পারে।

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


8
দয়া করে আরও মনোযোগ দিয়ে পড়ুন, টম - সঠিক বাক্যাংশটি ছিল "উন্মাদ বিদ্বেষ"; "ঘৃণিত" বিশেষণ "পাগল" এর বস্তু ছিল, "মানুষ" নয়। ইংলিশ কখনও কখনও কিছুটা কঠিন হতে পারে ;-)
স্টিভেন এ লো

0

বেসিক্যালি কোডের 2 টি ব্লক যা একই কাজ করে। হতে পারে এটি কিছুটা অদ্ভুত উদাহরণ তবে এটি বিন্দুটি প্রমাণ করে। এসকিউএল সার্ভার 2005:

SELECT * INTO #temp FROM master..spt_values
DECLARE @startTime DATETIME

BEGIN TRAN 

SELECT @startTime = GETDATE()
UPDATE #temp
SET number = 0
select DATEDIFF(ms, @startTime, GETDATE())

ROLLBACK 

BEGIN TRAN 
DECLARE @name VARCHAR

DECLARE tempCursor CURSOR
    FOR SELECT name FROM #temp

OPEN tempCursor

FETCH NEXT FROM tempCursor 
INTO @name

SELECT @startTime = GETDATE()
WHILE @@FETCH_STATUS = 0
BEGIN

    UPDATE #temp SET number = 0 WHERE NAME = @name
    FETCH NEXT FROM tempCursor 
    INTO @name

END 
select DATEDIFF(ms, @startTime, GETDATE())
CLOSE tempCursor
DEALLOCATE tempCursor

ROLLBACK 
DROP TABLE #temp

একক আপডেটে 156 এমএস লাগে যখন কার্সারটি 2016 এমএস নেয়।


3
হ্যাঁ, এটি প্রমাণ করে যে এটি একটি কর্সার ব্যবহার করার জন্য সত্যিই বোবা উপায়! তবে কী হবে যদি প্রতিটি সারিটির আপডেট তারিখের ক্রমটির পূর্ববর্তী সারির মানের উপর নির্ভর করে?
স্টিভেন এ লো।

শুরু করুন টেবিল থেকে প্রথম 1 বেসওয়াল টেবিল থেকে টাইমস্ট্যাম্প ডিজাইন ইনসার্ট টেবিল (ক্ষেত্র)
ভলিউস

@ ডুফলেডোরফার: এটি শেষ সারিটির ভিত্তিতে একটি সারি তারিখ অনুসারে সন্নিবেশ করিয়ে দেবে, তারিখের ক্রম অনুযায়ী তার আগের সারি থেকে কোনও সারি দ্বারা কোনও সারি আপডেট করবে না
স্টিভেন এ লো লো

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