এসকিউএল সার্ভার 2012 এ দুটি প্রশ্নের তুলনা করা


14

আমি এসকিউএল সার্ভার ২০১২-তে দুটি ক্যোয়ারির তুলনা করছি best লক্ষ্যটি হ'ল সর্বোত্তম কোয়েরিটি বেছে নেওয়ার সময় কোয়েরি অপ্টিমাইজার থেকে পাওয়া সমস্ত প্রাসঙ্গিক তথ্য ব্যবহার করা । উভয় প্রশ্নের একই ফলাফল উত্পাদন; সমস্ত গ্রাহকদের জন্য সর্বাধিক অর্ডার।

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

নীচে প্রদত্ত তথ্য ব্যবহার করে, কোন কোয়েরিটি ভাল পছন্দ?

-- Query 1 - return the maximum order id for a customer
SELECT orderid, custid
FROM Sales.Orders AS O1
WHERE orderid = (SELECT MAX(O2.orderid)
                 FROM Sales.Orders AS O2
                 WHERE O2.custid = O1.custid);


-- Query 2 - return the maximum order id for a customer
SELECT MAX(orderid), custid
FROM Sales.Orders AS O1
group by custid
order by custid

পরিসংখ্যান সময়

ক্যারিয়ার 1 টি স্ট্যাটিকস টাইম: সিপিইউ টাইম = 0 মিমি, অতিক্রান্ত সময় = 24 এমএস

ক্যারিয়ার 2 স্ট্যাটাসটিক্স সময়: সিপিইউ সময় = 0 এমএস, অতিবাহিত সময় = 23 এমএস

পরিসংখ্যান আইও

প্রশ্ন 1 সংখ্যক আইও: সারণী 'আদেশ'। স্ক্যান কাউন্ট 1, লজিকাল রিড 5, ফিজিকাল রিডস 2, রিড-ফরোয়ার্ড রিড 0, লব লজিকাল রিড 0, লব ফিজিকাল 0, লব রিড-ফরোয়ার্ড 0

প্রশ্ন 2 সংখ্যক আইও: সারণী 'আদেশ' ' স্ক্যান কাউন্ট 1, লজিকাল রিডস 4, ফিজিকাল রিডস 1, রিড-ফরোয়ার্ড রিডস 8, লব লজিকাল রিড 0, লব ফিজিকাল 0, লব রিড-ফরোয়ার্ড 0

কার্যকর করার পরিকল্পনা

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

নির্বাচন করুন বৈশিষ্ট্য ক্যোয়ারী 1

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

বৈশিষ্ট্য অনুসন্ধান প্রশ্ন 2

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

উপসংহার:

প্রশ্ন ঘ

  1. ব্যাচের ব্যয় 48%
  2. লজিকাল রিডস 5
  3. শারীরিক পাঠ 2
  4. পড়ুন-এগিয়ে পড়ুন: 0
  5. সিপিইউ সময়: 0 মিমি
  6. অতিবাহিত সময় 24 মিমি
  7. আনুমানিক সাবট্রি ব্যয়: 0.0050276
  8. সংকলনসিপিইউ: 2
  9. সংকলন: 384
  10. কম্পাইলটাইম: 2

প্রশ্ন 2

  1. ব্যাচের দাম 52%
  2. লজিকাল রিডস 4
  3. শারীরিক পাঠ ১
  4. পড়ুন-এগিয়ে পড়ুন: 8
  5. সিপিইউ সময় 0
  6. অতিবাহিত সময় 23 মিমি
  7. আনুমানিক সাবট্রি ব্যয়: 0.0054782
  8. সংকলন সিপিইউ: 0
  9. সংকলন: 192
  10. কম্পাইলটাইম: 0

ব্যক্তিগতভাবে, যদিও গ্রাফিক্যাল প্ল্যান অনুযায়ী কোয়েরি 2 এর উচ্চ ব্যাচের ব্যয় বেশি, আমি মনে করি এর আরও কার্যকর যে ক্যোয়ারী 1। কারণ ক্যোরি 2 তে কম লজিক্যাল রিডের প্রয়োজন হয়, কিছুটা কম সময় ব্যয় হয়, সংকলন, সংকলন এবং সংকলন মানগুলি নত করুন। রিড-ফরোয়ার্ড রিডিংগুলি ক্যোয়ারী 2 এর জন্য 8 এবং ক্যোয়ারী 1 এর জন্য 0 হয়।

আপডেট 12:03

ক্লাস্টার্ড সূচক সংজ্ঞা

ALTER TABLE [Sales].[Orders] ADD  CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED 
(
    [orderid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

নন-ক্লাস্টার্ড ইনডেক্স idx_nc_custid

CREATE NONCLUSTERED INDEX [idx_nc_custid] ON [Sales].[Orders]
(
    [custid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
পল হোয়াইট 9

উত্তর:


10

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

আমি এটির মধ্যে 200,000 বিক্রয় অর্ডার সহ সবেমাত্র একটি বিক্রয় অর্ডারস টেবিল তৈরি করেছি - কল্পনাটির কোনও অংশে এখনও বিশাল নয়। এবং প্রত্যেকের অর্ডার দিয়ে প্রশ্নগুলি চালিয়েছেন। আমিও কিছুটা সূচকের সাথে খেলেছি।

অর্ডারআইডি-তে কোনও ক্লাস্টারড ইনডেক্স নেই, কাস্টিডে কেবল একটি ক্লাস্টারযুক্ত সূচক দ্বিতীয় কোয়েরি ছাড়িয়েছে। বিশেষত প্রতিটি অন্তর্ভুক্ত দ্বারা অর্ডার সঙ্গে। দ্বিতীয় ক্যোয়ারীর চেয়ে প্রথম ক্যোয়ারীতে দ্বিগুণ পাঠ্য ছিল এবং প্রশ্নের শতাংশগুলির মধ্যে ব্যয় শতাংশ ছিল 67% / 33%%

অর্ডারআইডি-তে একটি ক্লাস্টারযুক্ত সূচক এবং কেবলমাত্র কাস্টিডে একটি ক্লাস্টারযুক্ত সূচক তারা একই গতিতে এবং ঠিক একই সংখ্যক পাঠে পারফর্ম করেছে।

সুতরাং আমি আপনাকে সারি সংখ্যা বৃদ্ধি এবং আরও কিছু পরীক্ষা করার পরামর্শ দিচ্ছি। তবে আপনার প্রশ্নের উপর আমার চূড়ান্ত বিশ্লেষণ -

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

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

আপডেট করা: আপনার প্রশ্নের অধীনে আপনার মন্তব্যগুলির মধ্যে একটি ছিল:

দয়া করে মনে রাখবেন, এই প্রশ্নের সর্বোত্তম ক্যোয়ারী সন্ধান করা তাদের তুলনা করার জন্য ব্যবহৃত কৌশলগুলিকে পরিমার্জন করার একটি মাধ্যম।

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

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


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

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

যেহেতু আমরা কাস্টিড দ্বারা গোষ্ঠীকরণ করছি, আপনি কীভাবে কুষ্টিয়াদ মানগুলি এলোমেলোভাবে তৈরি করলেন? আমার পড়া থেকে আমি একটি জিনিস মনে রাখি তা হ'ল স্বতন্ত্র মানগুলির গুরুত্ব। যদি কাস্টিডের স্বল্প সংখ্যক স্বতন্ত্র গ্রাহক থাকে তবে স্ট্রিম সামগ্রীর জন্য ব্যয়টি অবাস্তব হবে।
ক্রেগ এফ্রেইন

আমি 100 জন গ্রাহক তৈরি করতে এলোমেলোভাবে র্যান্ড ফাংশনটি ব্যবহার করেছি এবং এলোমেলোভাবে প্রতিটি অর্ডারআইডিতে একটি বরাদ্দ করেছি .. আমি একটি দ্রুত চেক করছি। :)
মাইক ওয়ালশ

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