একটি সঞ্চিত পদ্ধতি এবং দেখার মধ্যে পার্থক্য কী?


137

আমি কয়েকটি বিষয় সম্পর্কে বিভ্রান্ত:

  1. একটি সঞ্চিত পদ্ধতি এবং দেখার মধ্যে পার্থক্য কী?

  2. আমার কখন সঞ্চিত পদ্ধতি ব্যবহার করা উচিত এবং এসকিউএল সার্ভারে কখন আমার দৃষ্টিভঙ্গি ব্যবহার করা উচিত?

  3. আমরা কীভাবে প্যারামিটারগুলি পাস করতে পারি সেই দৃশ্যগুলি কী গতিশীল কোয়েরি তৈরির অনুমতি দেয়?

  4. কোনটি দ্রুত এবং কোনটির ভিত্তিতে একজনের তুলনায় অন্যটি দ্রুত?

  5. দৃশ্য বা সঞ্চিত পদ্ধতিগুলি স্থায়ীভাবে মেমরি বরাদ্দ করে?

  6. যদি কেউ বলে যে ভিউগুলি ভার্চুয়াল টেবিল তৈরি করে, যখন পদ্ধতিগুলি একটি উপকরণ সারণী তৈরি করে, তার অর্থ কী?

আরও কিছু পয়েন্ট সম্পর্কে আমাকে দয়া করে জানান, যদি সেখানে থাকে।

উত্তর:


143

একটি দৃশ্য ভার্চুয়াল টেবিল উপস্থাপন করে। আপনি একটি ভিউতে একাধিক টেবিলগুলিতে যোগদান করতে পারেন এবং ডেটা উপস্থাপন করতে ভিউটি ব্যবহার করতে পারেন যেন কোনও একক টেবিল থেকে ডেটা আসছে।

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

ভিউ এবং সঞ্চিত পদ্ধতি তৈরি করা - প্রতিটি কখন এবং কেন ব্যবহার করতে হবে সে সম্পর্কে মাইক্রোসফ্ট থেকে কিছু তথ্য রয়েছে।

বলুন আমার কাছে দুটি টেবিল রয়েছে:

  • tbl_user, কলাম সঙ্গে user_id, user_name,user_pw
  • tbl_profile, কলাম সঙ্গে profile_id, user_id,profile_description

সুতরাং, যদি আমি নিজেকে এই টেবিলগুলি থেকে খুব জিজ্ঞাসাবাদ করে দেখতে পাই ... এসকিউএল এর প্রতিটি অংশে যোগ দেওয়ার পরিবর্তে, আমি এই মতটিকে সংজ্ঞায়িত করব:

CREATE VIEW vw_user_profile
AS
  SELECT A.user_id, B.profile_description
  FROM tbl_user A LEFT JOIN tbl_profile B ON A.user_id = b.user_id
GO

সুতরাং, যদি আমি ক্যোয়ারী করতে চান profile_descriptionদ্বারা user_idভবিষ্যতে, আমি না হয় আছে:

SELECT profile_description FROM vw_user_profile WHERE user_id = @ID

এই কোডটি একটি সঞ্চিত পদ্ধতিতে ব্যবহার করা যেতে পারে যেমন:

CREATE PROCEDURE dbo.getDesc
    @ID int
AS
BEGIN
    SELECT profile_description FROM vw_user_profile WHERE user_id = @ID
END
GO

সুতরাং, পরে, আমি কল করতে পারি:

dbo.getDesc 25

এবং আমি user_id25 এর বিবরণ পেয়ে যাব , যেখানে এটি 25আপনার প্যারামিটার।

স্পষ্টতই আরও অনেক বিশদ রয়েছে, এটি কেবলমাত্র প্রাথমিক ধারণা।


1
তবে আমি যোগ দিতে পারি স্টোরেজ পদ্ধতিতে একাধিক টেবিলগুলিতে যোগদান করতে পারি যেখানে আমাকে প্যারামিটার দিতে হবে না।
নভিসোটোডটনেট

5
তবে আপনি কেন এটি করবেন? তুমি অর্জন করার জন্য কি চেষ্টা করতেছ? আপনি একটি টেবিল হিসাবে একটি দর্শন ব্যবহার করতে পারেন ... সঞ্চিত পদ্ধতিগুলি করণীয় জন্য ... ভিউগুলি আপনার জীবনকে আরও সহজ করার জন্য।
প্যাট্রিক

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

2
আমি পাচ্ছি না, দয়া করে আরও কিছু বিবরণ দিন।
নভিসোটোডটনেট

2
ঠিক আছে তবে এটি তখন আপনার দৃষ্টিভঙ্গি সংরক্ষণ করে ... যাতে আপনি এটিকে একক টেবিলের মতো কল করতে পারেন। এইভাবে আপনি একবার আপনার যোগদানকে তৈরি করেছেন এবং ভবিষ্যতের কোনও ভবিষ্যত সরাসরি সেই ভিউকে রেফারেন্স ব্যবহার করে যা অন্তর্নিহিত এসকিএলকে কল করে যেন এটি কোনও টেবিল ছিল।
প্যাট্রিক

107

এখানে প্রচুর তথ্য উপলব্ধ

এখানে একটি ভাল সংক্ষিপ্তসার:

একটি সঞ্চিত পদ্ধতি:

  • পরামিতি গ্রহণ করে
  • বৃহত্তর ক্যোয়ারিতে বিল্ডিং ব্লক হিসাবে ব্যবহার করা যায় না
  • বেশ কয়েকটি বিবৃতি, লুপস, যদি ELSE ইত্যাদি থাকতে পারে
  • এক বা একাধিক টেবিল পরিবর্তন করতে পারে
  • ইনসার্ট, আপডেট বা বিবৃতি মুছে ফেলার লক্ষ্য হিসাবে ব্যবহার করা যাবে না।

একটি দৃশ্য:

  • না না পরামিতি গ্রহণ
  • আরও বড় ক্যোয়ারিতে বিল্ডিং ব্লক হিসাবে ব্যবহার করা যেতে পারে
  • কেবলমাত্র একটি একক নির্বাচন জিজ্ঞাসা থাকতে পারে
  • কোনও টেবিলে পরিবর্তন সম্পাদন করতে পারে না
  • তবে (কখনও কখনও) কোনও INSERT, আপডেট বা বিবৃতি মুছে ফেলার লক্ষ্য হিসাবে ব্যবহার করা যেতে পারে।

6
এছাড়াও
ভিউগুলিতে

2
"ইনসার্ট, আপডেট বা বিবৃতি মোছার লক্ষ্য হিসাবে ব্যবহার করা যাবে না" এর অর্থ কী? আমরা কি সঞ্চিত পদ্ধতিতে INSERT, মোছা, আপডেট আপডেট ব্যবহার করতে পারি না?
আরসমান আহমদ

"একটি দৃশ্য, প্যারামিটারগুলি গ্রহণ করে না", এটি সত্য নয়? উদাহরণস্বরূপ ভিডিওটি: youtube.com/watch?v=zK-mWjUxKpw
xayer


8

প্রথমে আপনার বুঝতে হবে, যে উভয়ই আলাদা জিনিস। বিবৃতি Stored Proceduresজন্য সেরা ব্যবহার করা হয় INSERT-UPDATE-DELETE। যেখানে বিবৃতি Viewsব্যবহার করা হয় SELECT। আপনি উভয় ব্যবহার করা উচিত।

দর্শনে আপনি ডেটা পরিবর্তন করতে পারবেন না। কিছু ডাটাবেস updatable দেখেছে যেখানে আপনি ব্যবহার করতে INSERT-UPDATE-DELETEউপর Views


2
আপনি ভিউ ব্যবহার করে অন্তর্নিহিত সারণিতে ডেটা পরিবর্তন করতে পারেন। দর্শনগুলি আপডেটযোগ্য।
ডট নেট বিকাশকারী

7

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

ভিউ ডাটাবেস টেবিলগুলিতে সঞ্চিত ডেটা শোকেজিং, যেখানে একটি সঞ্চিত প্রক্রিয়াটি স্টেটমেন্টের একটি গ্রুপ যা কার্যকর করা যায় can

একটি ভিউ দ্রুততর হয় যখন এটি সারণী থেকে রেফারেন্সযুক্ত ডেটা প্রদর্শন করে যখন কোনও স্টোর পদ্ধতি স্ক্যাল স্টেটমেন্ট কার্যকর করে।

এই নিবন্ধটি দেখুন : বনাম সঞ্চিত পদ্ধতি দেখুন । ঠিক আপনি যা খুঁজছেন


5

একটি ভিউ SELECTডাটাবেসের জটিলতা সংরক্ষণ করার একটি সহজ উপায় ।

সাধারণ এসকিউএল কেবল পর্যাপ্ত না হলে স্টোর পদ্ধতি ব্যবহার করা হয়। স্টোর পদ্ধতিতে ভেরিয়েবল, লুপ এবং অন্যান্য সঞ্চিত পদ্ধতিতে কল থাকে। এটি একটি প্রোগ্রামিং ভাষা, কোয়েরি ভাষা নয়।

  1. দৃশ্যগুলি স্থিতিশীল। এগুলিকে একটি নির্দিষ্ট বিন্যাস সহ নতুন টেবিল হিসাবে ভাবেন এবং এগুলির মধ্যে ডেটা তৈরি করে আপনার তৈরি ক্যোয়ারীটি ব্যবহার করে the কোনো এসকিউএল টেবিল হিসাবে, আপনি বাছাই এবং সঙ্গে এটি ফিল্টার করতে পারেন WHERE, GROUP BYএবং ORDER BY

  2. আপনি কি করেন তার উপর নির্ভর করে।

  3. ডাটাবেসের উপর নির্ভর করে। সাধারণ দর্শনগুলি কেবল ক্যোরি চালায় এবং ফলাফলটি ফিল্টার করে। তবে ওরাকলের মতো ডেটাবেসগুলি "বস্তুগত" ভিউ তৈরি করতে দেয় যা মূলত একটি টেবিল যা ভিউয়ের অন্তর্নিহিত ডেটা পরিবর্তিত হলে স্বয়ংক্রিয়ভাবে আপডেট হয়।

    একটি বৈষম্যযুক্ত দৃশ্য আপনাকে দর্শন কলামগুলিতে সূচকগুলি তৈরি করতে দেয় (বিশেষত গণিত কলামগুলিতে যা ডেটাবেজে কোথাও বিদ্যমান নেই)।

  4. আপনি কী বলছেন তা আমি বুঝতে পারি না।


5

উপরের মন্তব্যগুলি ছাড়াও, আমি ভিউগুলি সম্পর্কে কয়েকটি পয়েন্ট যুক্ত করতে চাই।

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

4
  1. একটি দৃশ্য হ'ল একটি গতিশীল ক্যোয়ারী যেখানে আপনি "WHERE" -ক্লেজ ব্যবহার করতে পারেন
  2. সঞ্চিত পদ্ধতি হ'ল একটি স্থির ডেটা নির্বাচন, যা পূর্বনির্ধারিত ফলাফল দেয়
  3. না একটি দৃশ্য, না একটি সঞ্চয় পদ্ধতি মেমরি বরাদ্দ। কেবলমাত্র একটি বস্তুগত দর্শন
  4. একটি সারণী কেবল একটি ENTITY, একটি ভিউ বিভিন্ন ENTITIES বা টেবিল থেকে ডেটা সংগ্রহ করতে পারে

4

মহেশ যখন ঠিক করেন যে আপনি কোনও দৃশ্যে ডেটা পরিবর্তন করতে পারবেন না তখন তিনি পরামর্শ দেন না। তাই প্যাট্রিকের দৃষ্টিতে

CREATE View vw_user_profile AS 
Select A.user_id, B.profile_description
FROM tbl_user A left join tbl_profile B on A.user_id = b.user_id

আমি ডেটা আপডেট করতে পারি ... উদাহরণ হিসাবে আমি এর মধ্যে দুটিও করতে পারি ...

Update vw_user_profile Set profile_description='Manager' where user_id=4

অথবা

Update tbl_profile Set profile_description='Manager' where user_id=4

আপনি এই দৃষ্টিতে প্রবেশ করতে পারবেন না কারণ সমস্ত টেবিলের সমস্ত ক্ষেত্র উপস্থিত নেই এবং আমি ধরে নিচ্ছি যে PROFILE_ID প্রাথমিক কী এবং নাল হতে পারে না। তবে আপনি কখনও কখনও একটি ভিউতে অন্তর্ভুক্ত করতে পারেন ...

আমি ব্যবহার করে একটি বিদ্যমান টেবিলের উপর একটি ভিউ তৈরি করেছি ...

Create View Junk as SELECT * from [TableName]

তাহলে

Insert into junk (Code,name) values 
('glyn','Glyn Roberts'),
('Mary','Maryann Roberts')

এবং

DELETE from Junk Where ID>4

INSERT এবং ডিলিটি উভয়ই এই ক্ষেত্রে কাজ করেছিল

স্পষ্টতই আপনি একত্রিত বা গণনা করা কোনও ক্ষেত্র আপডেট করতে পারবেন না তবে যে কোনও দৃশ্য যা কেবল একটি সরল দর্শন হয় তা আপডেটযোগ্য able

যদি ভিউতে একাধিক টেবিল থাকে তবে আপনি সন্নিবেশ করতে বা মুছতে পারবেন না তবে যদি ভিউটি একটি টেবিলের উপসেট হয় তবেই আপনি সাধারণত পারেন।


3

মূল পার্থক্য হ'ল আপনি যখন কোনও ভিউ জিজ্ঞাসা করছেন তখন এর সংজ্ঞাটি আপনার ক্যোয়ারীতে আটকানো হবে। পদ্ধতিটি কোয়েরির ফলাফলও দিতে পারে তবে এটি সংকলিত এবং এত দ্রুত for অন্য বিকল্প হ'ল সূচিযুক্ত দর্শন ..


1

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

সঞ্চিত পদ্ধতিগুলি তাদের সমস্ত প্রক্রিয়াজাতকরণ হয় টেম্প হ্যাশ সারণী যেমন # tmpTable1 ব্যবহার করে বা মেমরিতে @ tmpTable1 ব্যবহার করে। আপনি এটি করতে কী বলতে চান তার উপর নির্ভরশীল।

একটি সঞ্চিত পদ্ধতি একটি ফাংশনের মতো তবে এটিকে সরাসরি নামে ডাকা হয়। কার্যের পরিবর্তে যা আসলে কোনও প্রশ্নের ভিতরেই ব্যবহৃত হয়।

স্পষ্টতই বেশিরভাগ সময় মেমরি টেবিলগুলি দ্রুত হয়, যদি আপনি প্রচুর ডেটা পুনরুদ্ধার করেন না।

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