অপ্টিমাইজেশান সমস্যা: যৌগিক ক্লাস্টারযুক্ত কীগুলি, পতাকা শর্তাবলী এবং সূচি-মার্জ


11

তিনটি টেবিল:

product: কলাম সহ: ( a, g, ...a_lot_more... )

a: PK, clustered
g: bit-column

main: কলাম সহ: ( c, f, a, b, ...a_lot_more... )

c: PK, clustered
f: bit-column
(a, b): UQ 

lookup কলাম সহ: ( a, b, c, i )

(a, b): PK, clustered
a: FK to product(a)
c: UQ, FK to main(c)
i: bit-column

আমি যোগদানের জন্য ভাল সূচকগুলি খুঁজে পাচ্ছি না:

FROM  
    product
  JOIN 
    lookup
      ON  lookup.a = product.a  
  JOIN
    main
      ON  main.c = lookup.c 
WHERE 
      product.g = 1
  AND
      main.f = 1
  AND 
      lookup.i = 1
  AND lookup.b = 17

আমি একটি প্রচ্ছদ সূচক চেষ্টা করেছি product (g, a, ...)এবং এটি ব্যবহার হয়েছে তবে দর্শনীয় ফলাফলের সাথে নয়।

lookupটেবিলে সূচকের কয়েকটি সংমিশ্রণ পূর্ববর্তী পরিকল্পনার তুলনায় সামান্য দক্ষতা অর্জনের সাথে সূচক-সংশ্লেষের সাথে কার্যকরকরণের পরিকল্পনা করে।

আমি কি অনুপস্থিত কিছু স্পষ্ট সমন্বয় আছে?

কাঠামোর একটি নতুন নকশা সাহায্য করতে পারে?

ডিবিএমএসটি মাইএসকিউএল 5.5 এবং সমস্ত সারণী ইনোডিবি ব্যবহার করছে।


টেবিলের আকার:

product: 67K   ,  g applied:    64K 

main:   420K   ,  f applied:   190K

lookup:  12M   ,  b,i applied:  67K 

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

কার্টেসিয়ান পণ্য মনে হচ্ছে কারণ আমি পণ্যের টেবিল থেকে কিছু যোগ দিচ্ছি না। নাকি আমি কিছু মিস করেছি ???
রোল্যান্ডোমাইএসকিউএলডিবিএ

@ রোল্যান্ডোমাইএসকিউএলডিবিএ: আপনি ঠিক বলেছেন। আমি কোয়েরিটি সংশোধন করব।
ypercubeᵀᴹ

উত্তর:


3

এটা আমার কষ্ট দেয় ...

এর আগে আমাকে ইনোডিবি-র সাথে টেম্প টেবিল ব্যবহার করতে হয়েছিল। এগুলি ফিল্টার সহ লোড করুন, একটি সূচি তৈরি করুন, এই টেম্প টেবিলটিতে যোগ দিন।

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

টেম্প টেবিলগুলি মাইএসকিউএল কোয়েরি অপ্টিমাইজারের স্তরের সামগ্রিক জটিলতা টেনে নিয়ে যায় ...


Thnx, আমি চেষ্টা করব। সংখ্যা বা সারি (মানদণ্ড প্রয়োগ করার পরে যথাক্রমে বড়, 64 কে, 67 কে, 190 কে নয়)। হতে পারে আমার তিনটি টেবিলের একটি থেকে মুক্তি পাওয়ার চেষ্টা করা উচিত ( main) এর মধ্যে ডেটা ডেনারালাইমাইজ করে lookup?
ypercubeᵀᴹ

1
@ টিউবারকিউব: ডেনারমালাইজিং সারিগুলিকে আরও প্রশস্ত করবে, নীচের পৃষ্ঠার ঘনত্ব = অন্যান্য সমস্যা
gbn

3

এটি দেখতে কার্টেসিয়ান পণ্যের মতো দেখাচ্ছে। যোগদানের মানদণ্ডটি আবার করুন

FROM  
    product
  JOIN 
    lookup
      ON  product.a = lookup.a  
  JOIN
    main
      ON  main.c = lookup.c 
WHERE 
      product.g = 1
  AND
      main.f = 1
  AND 
      lookup.i = 1
  AND lookup.b = 17

বিকল্প পরামর্শ

এটি অপ্রচলিত মনে হতে পারে এবং সম্ভবত এসকিউএল অ্যানিটপ্যাটার্নের মতো গন্ধ পাওয়া যায় তবে এখানে এটি যায় ...

FROM  
    product
JOIN 
    (
        SELECT * FROM lookup
        WHERE i=1 AND b=17
    ) lookup ON product.a = lookup.a  
JOIN
   main ON main.c = lookup.c 
WHERE 
    product.g = 1 AND main.f = 1

আমি না সরানো product.g = 1এবং main.f = 1মধ্যে subqueries কারণ তারা বিট ক্ষেত্র এবং মাত্র সময়ে একটি টেবিল স্ক্যান করতে হবে। এমনকি বিট ক্ষেত্রগুলি সূচকগুলি হলেও, ক্যোরি অপ্টিমাইজারটি কেবল এমন সূচকটিকে উপেক্ষা করবে।

অবশ্যই, আপনার নির্বাচনের কিছু প্রয়োজন না হলে আপনি এটি পরিবর্তন SELECT * FROM lookupকরতে SELECT a FROM lookupপারেনlookup

সম্ভবত এটি দেখার জন্য প্রধান এবং লুকের মধ্যে জোনে একটি, বি জড়িত করুন

FROM  
    product
  JOIN 
    lookup
      ON  product.a = lookup.a  
  JOIN
    main
      ON  main.a = lookup.a AND main.b = lookup.b
WHERE 
      product.g = 1
  AND
      main.f = 1
  AND 
      lookup.i = 1
  AND lookup.b = 17

অথবা সি পিছনে রেখে তিনটি কলামে যোগ দিন (এবং তিনটি কলামে সূচি ইন mainএবং lookup)

FROM  
    product
  JOIN 
    lookup
      ON  product.a = lookup.a  
  JOIN
    main
      ON main.a = lookup.a
      AND main.b = lookup.b
      AND main.c = lookup.c
WHERE 
      product.g = 1
  AND
      main.f = 1
  AND 
      lookup.i = 1
  AND lookup.b = 17

Thnx। ভিন্ন ভিন্ন পরিকল্পনা, তবে একই রকম পারফরম্যান্স।
ypercubeᵀᴹ

এর কার্ডিনালিটি কী main.fএবং product.g??? এর cardinality যদি main.fএবং product.gমানের জন্য 1 টেবিল সারি কম 5% উপর একটি সূচক main.fএবং product.gসমর্থনীয় করা যেতে পারে।
রোল্যান্ডোমাইএসকিউএলডিবিএ

কিছু মনে করবেন না, তারা ইতিমধ্যে সূচিযুক্ত। এর কার্ডিনালটি যদি হয় main.fএবং product.g2 হয়, আপনি সেই সূচকগুলি খনন করতে পারেন।
রোল্যান্ডোমাইএসকিউএলডিবিএ

ব্যবহৃত টেবিলের আকার এবং সারি দিয়ে প্রশ্ন সম্পাদনা করা (শর্তাদি প্রয়োগ করার পরে)।
ypercubeᵀᴹ

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