আমি যখন তাদের যেখানে একটি বিধি যুক্ত করব তখন কী দৃষ্টিভঙ্গিগুলি অনুকূলিত হয়?


28

আপনি যদি ভিউটির ভিতরে বা বাহিরে কোনও ভিউ ফিল্টার করেন তবে এটি কি কোনও পার্থক্য করে?

উদাহরণস্বরূপ, এই দুটি প্রশ্নের মধ্যে কোনও পার্থক্য আছে কি?

SELECT Id
FROM MyTable
WHERE SomeColumn = 1

অথবা

SELECT Id
FROM MyView
WHERE SomeColumn = 1

এবং MyViewহিসাবে সংজ্ঞায়িত করা হয়

SELECT Id, SomeColumn
FROM MyTable

যদি লিঙ্কযুক্ত সার্ভারে উত্স টেবিলটি থাকে তবে উত্তরটি কি অন্যরকম?

আমি জিজ্ঞাসা করছি কারণ আমাকে একটি লিঙ্কযুক্ত সার্ভার থেকে দু'বার বড় টেবিল (44 মিলিল সারি) জিজ্ঞাসা করতে হবে, এবং ফলাফলগুলির সামগ্রিক সংগ্রহ পেতে হবে। আমি জানতে চাই যে ডেটা অ্যাক্সেস করার জন্য আমার দুটি মতামত তৈরি করা উচিত, প্রতিটি প্রশ্নের জন্য একটি, অথবা আমি যদি একটি একক দর্শন এবং একটি WHEREধারা দিয়ে দূরে যেতে পারি ।


1
আপনি যদি কেবলমাত্র তার মধ্যে একটি টেবিল রেখে থাকেন তবে কেন আপনি কেন একটি দৃশ্য ব্যবহার করবেন?
এইচএলজিইএম

3
@ এইচএলজিইএম সুরক্ষা?
জেএনকে

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

আরো দেখুন stackoverflow.com/a/6654525/27535
gbn

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

উত্তর:


12

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

এখন, ডাটা টাইপ এবং এর নির্বাচনীকরণের উপর নির্ভর করে MyColumn, আপনি যদি বেস টেবিলটিতে একটি ফিল্টার সূচক তৈরি করতে চান (আপনি এসকিউএল সার্ভার ২০০+ এ যান), আপনি আরও ভাল পারফরম্যান্স পেতে পারেন, তবে এটি আবার দৃশ্যের মাধ্যমে আলাদা হবে না বা ছাড়া


3
এই প্রশ্নটি সম্পর্কে কী জিজ্ঞাসা করা হচ্ছে কেন whereভিউর বাইরে থাকা ধারাটির সাথে কেন এমন কোনও প্রশ্নের দৃষ্টিতে রাখার চেয়ে এত বেশি সময় নেয়?
রাহেল

1
মতামত যদি পারফরম্যান্সের জন্য না হয় তবে তারা কেবল কাঠামোর জন্য?
profimedica

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

5

এখানে কেবলমাত্র একটি দ্রুত উদাহরণ দেখানো হচ্ছে যে কোনও পার্থক্য থাকা উচিত নয়। ডাটাবেস হ'ল AdventureWorksডেটাবেস।

দুটি সংজ্ঞা দেখুন:

create view Person.vContactWhere
as

    select *
    from person.Contact
    where ContactID = 24

go

create view Person.vContactNoWhere
as

    select *
    from person.Contact

go

এখানে WHEREদ্য সংজ্ঞাটি অন্তর্ভুক্ত করার সাথে প্রথম ক্যোয়ারী হবে :

select *
from person.vContactWhere

এখানে কার্যকর করার পরিকল্পনা রয়েছে:

এখানে চিত্র বর্ণনা লিখুন

এবং দ্বিতীয় ক্যোয়ারী, WHEREদফার সাথে ভিউ সংজ্ঞাতে নয়, তবে SELECTক্যোয়ারিতে:

select *
from person.vContactNoWhere
where ContactID = 24

এখানে কার্যকর করা পরিকল্পনা:

এখানে চিত্র বর্ণনা লিখুন

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


1
এই প্রশ্নটি সম্পর্কে কী জিজ্ঞাসা করা হচ্ছে কেন whereভিউর বাইরে থাকা ধারাটির সাথে কেন এমন কোনও প্রশ্নের দৃষ্টিতে রাখার চেয়ে এত বেশি সময় নেয়?
রাহেল

1
@ র্যাচেল আমার ধারণা, জিবিএন তার পোস্টে এটি আরও ভালভাবে ব্যাখ্যা করেছে, এবং যে নিবন্ধটি তিনি নির্দেশ করেছেন। আর কীভাবে রাখব জানি না।
টমাস স্ট্রিংগার

আমি এটি যুক্ত করেছি কারণ সেই ক্ষেত্রে, মৃত্যুদণ্ড কার্যকর করার পরিকল্পনাগুলি একই ছিল না, যা আপনার উত্তর বলে যা তার চেয়ে আলাদা।
রাচেল

1
@ রাচেল এই উদাহরণটিতে থাকা সমস্যাটি অনুপস্থিত রূপান্তরের নিয়ম । এটি কেবলমাত্র দেখার জন্য নয় সিটিই এবং অন্যান্য টেবিলের মত প্রকাশের ক্ষেত্রেও প্রযোজ্য। সাধারণ ক্ষেত্রে এটি ফলকে পরিবর্তন করবে বলে র‌্যাঙ্কিং ফাংশন সম্বলিত টেবিল এক্সপ্রেশনগুলিতে নীচু করে রাখা বৈধ নয়। এই ক্ষেত্রে এটি বৈধ হওয়ার কারণ হ'ল Whereধারাটি ফিট করে PARTITION BY। এসকিউএল সার্ভার 2008 এর SelOnSeqPrjএই বিশেষ কেসটিকে স্বীকৃতি দেওয়ার জন্য একটি নতুন নিয়ম রয়েছে বলে মনে হচ্ছে ।
মার্টিন স্মিথ


2

আমি যা পড়ছি তার উপর ভিত্তি করে , এসকিউএল এক্সিকিউশন প্ল্যান নির্ধারণের সময় সাব কোয়ের মতো একটি স্ট্যান্ডার্ড ভিউ ব্যবহার করবে।

সুতরাং আমার উদাহরণ ক্যোয়ারী ব্যবহার করে,

SELECT Id
FROM MyView
WHERE SomeColumn = 1

যেখানে MyViewহিসাবে সংজ্ঞায়িত করা হয়

SELECT Id, SomeColumn
FROM MyTable

এটি একই বাস্তবায়ন পরিকল্পনা উত্পন্ন করা উচিত

SELECT Id
FROM 
(
    SELECT Id, SomeColumn
    FROM MyTable
) as T
WHERE SomeColumn = 1

তবে এই কার্যকরকরণ পরিকল্পনাটি যা তৈরি করা হবে তার থেকে আলাদা হতে পারে

SELECT Id
FROM MyTable
WHERE SomeColumn = 1

আমি নিশ্চিত নই যে এই উত্তরটি সূচী দর্শনগুলির জন্য একই হবে কিনা


আমি মনে করি না এটি এর মতো স্পষ্ট পাঠ্য প্রতিস্থাপন।
অ্যারন বারট্র্যান্ড

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

@ রাচেল - প্রতিস্থাপনটি পাঠ্য স্তরের নয়, বীজজাতকৃত গাছের সাথে ঘটে।
মার্টিন স্মিথ

@ মার্টিনস্মিথ হার্মিম কি আমি যা বলেছিলাম তা নয়? যে মৃত্যুদণ্ড কার্যকর করার পরিকল্পনা একই হওয়া উচিত, পাঠ্যটি একই হবে না? আমি নিশ্চিত নই যে আমি "বীজগণিত গাছ" বুঝতে পেরেছি
রাচেল

এটি কিউ নিজেই আপনার মন্তব্যের প্রতিক্রিয়া হিসাবে এসেছিল যা বলে যে এটি "আপনার প্রশ্নের মধ্যে একটি ভিউয়ের পাঠ্য সন্নিবেশ করায়" এবং উপরের হারুনের মন্তব্যে। পার্স / সংকলন পর্যায়ে সম্পর্কে কিছু তথ্য এখানে । আসলে আপনার উত্তরটিতে পাঠ্যের বিকল্পেরও উল্লেখ রয়েছে। এটি তৈরি করার মতো পার্থক্য কিনা। নিশ্চিত না! তবে আমি অনুমান করি যে এটি কেন sp_refreshviewটেক্সট প্রতিস্থাপন ধারণাটি প্রয়োজন হবে না তা ব্যাখ্যা করে।
মার্টিন স্মিথ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.