হ্যাপস বনাম ক্লাস্টারড ইনডেক্সগুলিতে নন ক্লাস্টারযুক্ত সূচকের পারফরম্যান্স


39

এই 2007 হোয়াইট পেপারটি পৃথক নির্বাচন / সন্নিবেশ / মুছুন / আপডেট করার জন্য পারফরম্যান্সের তুলনা করে এবং ক্লাস্টারড ইনডেক্স হিসাবে সংগঠিত একটি টেবিলের উপরে নির্বাচনী বিবৃতিগুলির তুলনা করে যা সিআই হিসাবে একই কী কলামগুলিতে একটি ক্লাস্টারযুক্ত সূচক সহ একটি টেবিলের উপরে একটি ক্লাস্টারযুক্ত সূচক হিসাবে সজ্জিত হয় vs টেবিল।

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

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

এই অঞ্চলে যে অনুরূপ আনুষ্ঠানিক পরীক্ষা করা হয়েছে সে সম্পর্কে কি কেউ সচেতন এবং যদি তাই হয় তবে ফলাফল কী হয়েছিল?

উত্তর:


41

আপনার অনুরোধটি পরীক্ষা করতে আমি এই স্কিমটি অনুসরণ করে 2 টি টেবিল তৈরি করেছি:

  • Balance.৯ মিলিয়ন রেকর্ড ভারসাম্য সম্পর্কিত তথ্য উপস্থাপন করে।
  • একটি পরিচয় ক্ষেত্রের গণনা 1 থেকে 7.9 মিলিয়ন
  • প্রায় 500k গ্রুপে রেকর্ডকে গোষ্ঠীযুক্ত একটি নম্বর ক্ষেত্র।

প্রথম টেবিলটি heapমাঠে একটি নন ক্লাস্টার ইনডেক্স পেয়েছে group। দ্বিতীয় সারণী নামক clustঅনুক্রমিক ক্ষেত্রটিতে একটি ক্লাস্টারড সূচক keyএবং ক্ষেত্রটিতে একটি অবিচ্ছিন্ন সূচক পেয়েছে calledgroup

পরীক্ষাগুলি একটি আই 5 এম 540 প্রসেসরে 2 হাইপারথ্রেডেড কোর, 4 জিবি মেমরি এবং 64-বিট উইন্ডোজ 7 সহ চালানো হয়েছিল।

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 
Apr  2 2010 15:48:46 
Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)  

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

দ্রষ্টব্য: সিপিইউ এবং সময়কাল মিলি সেকেন্ডে প্রকাশ করা হয়

  • 1000 টি প্রশ্ন
  • ফলাফল থেকে শূন্য সিপিইউ অনুসন্ধানগুলি মুছে ফেলা হয়
  • ক্ষতিগ্রস্ত 0 টি সারি ফলাফল থেকে মুছে ফেলা হয়
int[] idList = new int[] { 6816588, 7086702, 6498815 ... }; // 1000 values here.
using (var conn = new SqlConnection(@"Data Source=myserver;Initial Catalog=mydb;Integrated Security=SSPI;"))
            {
                conn.Open();
                using (var cmd = new SqlCommand())
                {
                    cmd.Connection = conn;
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = "select * from heap where common_key between @id and @id+1000"; 
                    cmd.Parameters.Add("@id", SqlDbType.Int);
                    cmd.Prepare();
                    foreach (int id in idList)
                    {
                        cmd.Parameters[0].Value = id;

                        using (var reader = cmd.ExecuteReader())
                        {
                            int count = 0;
                            while (reader.Read())
                            {
                                count++;
                            }
                            Console.WriteLine(String.Format("key: {0} => {1} rows", id, count));
                        }
                    }
                }
            }

9 মার্চ 2011-এ আপডেটের সমাপ্তি

নির্বাচন কর্মক্ষমতা

পারফর্ম্যান্স নম্বর পরীক্ষা করতে আমি নীচের প্রশ্নগুলি একবার গাদা টেবিলে এবং একবার ক্লাস্ট টেবিলে করেছিলাম:

select * from heap/clust where group between 5678910 and 5679410
select * from heap/clust where group between 6234567 and 6234967
select * from heap/clust where group between 6455429 and 6455729
select * from heap/clust where group between 6655429 and 6655729
select * from heap/clust where group between 6955429 and 6955729
select * from heap/clust where group between 7195542 and 7155729

এই মানদণ্ডের ফলাফলগুলি হ'ল heap:

rows  reads CPU   Elapsed 
----- ----- ----- --------
1503  1510  31ms  309ms
401   405   15ms  283ms
2700  2709  0ms   472ms
0     3     0ms   30ms
2953  2962  32ms  257ms
0     0     0ms   0ms

আপডেট 9 মার্চ 2011 : cmd.CommandText = "select * from heap where group between @id and @id+1000";

  • 721 সারিগুলিতে> 0 সিপিইউ রয়েছে এবং 0 টিরও বেশি সারি প্রভাবিত করে
Counter   Minimum    Maximum Average  Weighted
--------- ------- ---------- ------- ---------
RowCounts    1001      69788    6368         -         
Cpu            15        374      37   0.00754
Reads        1069      91459    7682   1.20155
Writes          0          0       0   0.00000
Duration   0.3716   282.4850 10.3672   0.00180

9 মার্চ 2011-এ আপডেটের সমাপ্তি


টেবিলের clustজন্য ফলাফলগুলি হ'ল:

rows  reads CPU   Elapsed 
----- ----- ----- --------
1503  4827  31ms  327ms
401   1241  0ms   242ms
2700  8372  0ms   410ms
0     3     0ms   0ms
2953  9060  47ms  213ms
0     0     0ms   0ms

আপডেট 9 মার্চ 2011 : cmd.CommandText = "select * from clust where group between @id and @id+1000";

  • 721 সারিগুলিতে> 0 সিপিইউ রয়েছে এবং 0 টিরও বেশি সারি প্রভাবিত করে
Counter   Minimum    Maximum Average  Weighted
--------- ------- ---------- ------- ---------
RowCounts    1001      69788    6056         -
Cpu            15        468      38   0.00782
Reads        3194     227018   20457   3.37618
Writes          0          0       0       0.0
Duration   0.3949   159.6223 11.5699   0.00214

9 মার্চ 2011-এ আপডেটের সমাপ্তি


যোগদানের পারফরম্যান্সের সাথে নির্বাচন করুন

cmd.CommandText = "select * from heap/clust h join keys k on h.group = k.group where h.group between @id and @id+1000";


এই মানদণ্ডের ফলাফলগুলি হ'ল heap:

873 সারিগুলিতে> 0 সিপিইউ রয়েছে এবং 0 টিরও বেশি সারি প্রভাবিত করে

Counter   Minimum    Maximum Average  Weighted
--------- ------- ---------- ------- ---------
RowCounts    1009       4170    1683         -
Cpu            15         47      18   0.01175
Reads        2145       5518    2867   1.79246
Writes          0          0       0   0.00000
Duration   0.8215   131.9583  1.9095   0.00123

এই মানদণ্ডের ফলাফলগুলি হ'ল clust:

865 সারিগুলিতে> 0 সিপিইউ রয়েছে এবং 0 টিরও বেশি সারি প্রভাবিত করে

Counter   Minimum    Maximum Average  Weighted
--------- ------- ---------- ------- ---------
RowCounts    1000       4143    1685         -
Cpu            15         47      18   0.01193
Reads        5320      18690    8237   4.97813
Writes          0          0       0   0.00000
Duration   0.9699    20.3217  1.7934   0.00109

আপডেট আপডেট

প্রশ্নের দ্বিতীয় ব্যাচটি আপডেটের বিবৃতি:

update heap/clust set amount = amount + 0 where group between 5678910 and 5679410
update heap/clust set amount = amount + 0 where group between 6234567 and 6234967
update heap/clust set amount = amount + 0 where group between 6455429 and 6455729
update heap/clust set amount = amount + 0 where group between 6655429 and 6655729
update heap/clust set amount = amount + 0 where group between 6955429 and 6955729
update heap/clust set amount = amount + 0 where group between 7195542 and 7155729

এই মানদণ্ডের ফলাফলগুলি heap:

rows  reads CPU   Elapsed 
----- ----- ----- -------- 
1503  3013  31ms  175ms
401   806   0ms   22ms
2700  5409  47ms  100ms
0     3     0ms   0ms
2953  5915  31ms  88ms
0     0     0ms   0ms

আপডেট 9 মার্চ 2011 : cmd.CommandText = "update heap set amount = amount + @id where group between @id and @id+1000";

  • 811 সারিগুলিতে> 0 সিপিইউ রয়েছে এবং 0 টিরও বেশি সারি প্রভাবিত করে
Counter   Minimum    Maximum Average  Weighted
--------- ------- ---------- ------- ---------
RowCounts    1001      69788    5598       811         
Cpu            15        873      56   0.01199
Reads        2080     167593   11809   2.11217
Writes          0       1687     121   0.02170
Duration   0.6705   514.5347 17.2041   0.00344

9 মার্চ 2011-এ আপডেটের সমাপ্তি


এই মানদণ্ডের ফলাফলগুলি clust:

rows  reads CPU   Elapsed 
----- ----- ----- -------- 
1503  9126  16ms  35ms
401   2444  0ms   4ms
2700  16385 31ms  54ms
0     3     0ms   0ms 
2953  17919 31ms  35ms
0     0     0ms   0ms

আপডেট 9 মার্চ 2011 : cmd.CommandText = "update clust set amount = amount + @id where group between @id and @id+1000";

  • 853 সারিগুলিতে> 0 সিপিইউ রয়েছে এবং 0 টিরও বেশি সারি প্রভাবিত করে
Counter   Minimum    Maximum Average  Weighted
--------- ------- ---------- ------- ---------
RowCounts    1001      69788    5420         -
Cpu            15        594      50   0.01073
Reads        6226     432237   33597   6.20450
Writes          0       1730     110   0.01971
Duration   0.9134   193.7685  8.2919   0.00155

9 মার্চ 2011-এ আপডেটের সমাপ্তি


মানদণ্ড মুছুন

আমি দৌড়ে থাকা তৃতীয় ব্যাচের প্রশ্নের বিবৃতিগুলি মুছে ফেলা হয়

delete heap/clust where group between 5678910 and 5679410
delete heap/clust where group between 6234567 and 6234967
delete heap/clust where group between 6455429 and 6455729
delete heap/clust where group between 6655429 and 6655729
delete heap/clust where group between 6955429 and 6955729
delete heap/clust where group between 7195542 and 7155729

এই মানদণ্ডের ফলাফল heap:

rows  reads CPU   Elapsed 
----- ----- ----- -------- 
1503  10630 62ms  179ms
401   2838  0ms   26ms
2700  19077 47ms  87ms
0     4     0ms   0ms
2953  20865 62ms  196ms
0     4     0ms   9ms

আপডেট 9 মার্চ 2011 : cmd.CommandText = "delete heap where group between @id and @id+1000";

  • 724 সারিগুলিতে> 0 সিপিইউ রয়েছে এবং 0 টিরও বেশি সারি প্রভাবিত করে
Counter   Minimum    Maximum Average  Weighted
--------- ------- ---------- ------- ---------
RowCounts     192      69788    4781         -
Cpu            15        499      45   0.01247
Reads         841     307958   20987   4.37880
Writes          2       1819     127   0.02648
Duration   0.3775  1534.3383 17.2412   0.00349

9 মার্চ 2011-এ আপডেটের সমাপ্তি


এই মানদণ্ডের ফলাফল clust:

rows  reads CPU   Elapsed 
----- ----- ----- -------- 
1503  9228  16ms  55ms
401   3681  0ms   50ms
2700  24644 46ms  79ms
0     3     0ms   0ms
2953  26955 47ms  92ms
0     3     0ms   0ms

আপডেট 9 মার্চ 2011 :

cmd.CommandText = "delete clust where group between @id and @id+1000";

  • 751 সারিগুলিতে> 0 সিপিইউ রয়েছে এবং 0 টিরও বেশি সারি প্রভাবিত করে
Counter   Minimum    Maximum Average  Weighted
--------- ------- ---------- ------- ---------
RowCounts     144      69788    4648         -
Cpu            15        764      56   0.01538
Reads         989     458467   30207   6.48490
Writes          2       1830     127   0.02694
Duration   0.2938  2512.1968 24.3714   0.00555

9 মার্চ 2011-এ আপডেটের সমাপ্তি


ইনসার্ট মানদণ্ড

মানদণ্ডের শেষ অংশটি সন্নিবেশ বিবৃতি কার্যকর করা।

হিপ / ক্লাস্ট (...) মান (...), (...), (...), (...), (...), (...) intoোকান


এই মানদণ্ডের ফলাফল heap:

rows  reads CPU   Elapsed 
----- ----- ----- -------- 
6     38    0ms   31ms

আপডেট 9 মার্চ 2011 :

string str = @"insert into heap (group, currency, year, period, domain_id, mtdAmount, mtdAmount, ytdAmount, amount, ytd_restated, restated, auditDate, auditUser)
                    values";

                    for (int x = 0; x < 999; x++)
                    {
                        str += string.Format(@"(@id + {0}, 'EUR', 2012, 2, 0, 100, 100, 1000 + @id,1000, 1000,1000, current_timestamp, 'test'),  ", x);
                    }
                    str += string.Format(@"(@id, 'CAD', 2012, 2, 0, 100, 100, 1000 + @id,1000, 1000,1000, current_timestamp, 'test') ", 1000);

                    cmd.CommandText = str;
  • 912 বিবৃতিতে> 0 সিপিইউ রয়েছে
Counter   Minimum    Maximum Average  Weighted
--------- ------- ---------- ------- ---------
RowCounts    1000       1000    1000         -
Cpu            15       2138      25   0.02500
Reads        5212       7069    6328   6.32837
Writes         16         34      22   0.02222
Duration   1.6336   293.2132  4.4009   0.00440

9 মার্চ 2011-এ আপডেটের সমাপ্তি


এই মানদণ্ডের ফলাফল clust:

rows  reads CPU   Elapsed 
----- ----- ----- -------- 
6     50    0ms   18ms

আপডেট 9 মার্চ 2011 :

string str = @"insert into clust (group, currency, year, period, domain_id, mtdAmount, mtdAmount, ytdAmount, amount, ytd_restated, restated, auditDate, auditUser)
                    values";

                    for (int x = 0; x < 999; x++)
                    {
                        str += string.Format(@"(@id + {0}, 'EUR', 2012, 2, 0, 100, 100, 1000 + @id,1000, 1000,1000, current_timestamp, 'test'),  ", x);
                    }
                    str += string.Format(@"(@id, 'CAD', 2012, 2, 0, 100, 100, 1000 + @id,1000, 1000,1000, current_timestamp, 'test') ", 1000);

                    cmd.CommandText = str;
  • 946 বিবৃতিতে> 0 সিপিইউ রয়েছে
Counter   Minimum    Maximum Average  Weighted
--------- ------- ---------- ------- ---------
RowCounts    1000       1000    1000         -      
Cpu            15       2403      21   0.02157
Reads        6810       8997    8412   8.41223
Writes         16         25      19   0.01942
Duration   1.5375   268.2571  6.1463   0.00614

9 মার্চ 2011-এ আপডেটের সমাপ্তি


উপসংহার

যদিও ক্লাস্টার্ড এবং নন-ক্ল্লাস্টারড ইনডেক্স (ননক্র্লাস্টারড ইনডেক্স ব্যবহার করার সময়) সহ টেবিলটি অ্যাক্সেস করার সময় আরও যৌক্তিক পাঠ চলছে তবে সম্পাদনার ফলাফলগুলি:

  • নির্বাচনের বিবৃতি তুলনীয়
  • ক্লাস্টার ইনডেক্সের জায়গায় আপডেট আপডেটের বিবরণগুলি দ্রুততর
  • ক্লাস্টার ইনডেক্সের জায়গায় মুছে ফেলা বিবৃতিগুলি দ্রুততর হয়
  • INSERT স্টেটমেন্টগুলি ক্লাস্টার ইনডেক্সের জায়গায় দ্রুত

অবশ্যই আমার মানদণ্ডটি একটি নির্দিষ্ট ধরণের টেবিলের সাথে খুব সীমাবদ্ধ ছিল এবং খুব সীমাবদ্ধ প্রশ্নের সাথে রয়েছে, তবে আমি মনে করি যে এই তথ্যের ভিত্তিতে আমরা ইতিমধ্যে বলতে শুরু করতে পারি যে আপনার টেবিলে একটি ক্লাস্টার ইনডেক্স তৈরি করা কার্যত সর্বদা ভাল।

আপডেট 9 মার্চ 2011 :

আমরা যুক্ত হওয়া ফলাফলগুলি থেকে দেখতে পাচ্ছি, সীমাবদ্ধ পরীক্ষাগুলির সিদ্ধান্তগুলি প্রতিটি ক্ষেত্রেই সঠিক ছিল না।

ওজনকালীন সময়কাল

ফলাফলগুলি এখন সূচিত করে যে ক্লাস্টার ইনডেক্স থেকে উপকার পাওয়া একমাত্র বিবৃতিগুলি আপডেট স্টেটমেন্ট। অন্যান্য বিবৃতিগুলি ক্লাস্টারড ইনডেক্স সহ টেবিলে প্রায় 30% ধীর।

কিছু অতিরিক্ত চার্ট যেখানে আমি হ্যাপ বনাম ক্লাস্টের জন্য ক্যোয়ারী অনুসারে ওজনের সময়কাল প্লট করেছি। ওজনযুক্ত সময়কাল হিপ বনাম নির্বাচনের জন্য ক্লাস্টার্ড

যোগদানের জন্য ওজনযুক্ত সময়কাল হিপ বনাম ক্লাস্টার করা হয়েছে

আপডেটের জন্য ওজনযুক্ত সময়কাল হিপ বনাম ক্লাস্টার করা

মোছার জন্য ওজনযুক্ত সময়কাল হিপ বনাম গুচ্ছ

আপনি দেখতে পাচ্ছেন sertোকানো বিবৃতিগুলির জন্য পারফরম্যান্স প্রোফাইলটি বেশ আকর্ষণীয়। স্পাইকগুলি কয়েকটি ডেটা পয়েন্টের কারণে ঘটে যা সম্পূর্ণ হতে অনেক বেশি সময় নেয়। Weোকানোর জন্য ওজনযুক্ত সময়কাল হিপ বনাম ক্লাস্টার করা

9 মার্চ 2011-এ আপডেটের সমাপ্তি


@ মার্টিন আমি পরের সপ্তাহে কিছু সময় পেলে 500 মিলিয়ন রেকর্ড সহ কয়েকটি টেবিল সহ একটি সার্ভারে এটি চালানোর চেষ্টা করব।
ফিলিপ ডি ভোস

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

কিম্বারলি ট্রিপসের দ্য ক্লাস্টারড ইনডেক্স বিতর্ক অব্যাহত রেখেছে যেখানে তিনি ব্যাখ্যা করেছেন যে ক্লাস্টার টেবিলের সাথে সর্বাধিক (সমস্ত না থাকলে) অপারেশনগুলি কীভাবে তার গতির চেয়ে দ্রুত হয় - কিছুটা আপনার ফলাফলের বিপরীতে ...
মার্ক_স

1
@ মার্টিন, @ রিচার্ড, @মার্ক_স আমি এখনই আরও গুরুতর মানদণ্ডে কাজ করছি। আমি আজ পরে ফলাফল যোগ করতে সক্ষম হবেন আশা করি।
ফিলিপ ডি ভোস

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

12

ইনডেক্সিংয়ের কুইন - কিম্বারলি ট্রিপ তার ব্লগ পোস্টে বেশ সুন্দরভাবে ব্যাখ্যা করেছেন দ্য ক্লাস্টারড ইনডেক্স বিতর্ক অব্যাহত রয়েছে ... , একটি ডাটাবেস টেবিলে একটি ক্লাস্টারিং কী থাকা সমস্ত ক্রিয়াকলাপের গতি বাড়িয়েছে - শুধু নয় SELECT

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

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


3
এটি একটি উত্তর নেই। মার্টিন এসকিউএল সার্ভারে বেশ দৃ is়; প্রশ্নটি আরও তত্ত্ব নয়, পারফরম্যান্স টেস্টিং থেকে বাস্তব বিশ্বের পরীক্ষিত যাচাইকৃত ফলাফল পাওয়ার উদ্দেশ্যে করা হয়েছিল।

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

@ dbaguy52: আপনি কি মনে করেন কেন কিম ট্রিপ সব ধরণের এনসি সূচি আবরণ করছে? আমি তার ব্লগ পোস্টে এর কোন ধারণা দেখতে পাচ্ছি না ..... দয়া করে আপনার কি বিশ্বাস হয় যে বিষয়টি কেস (বা এটি তার অনুমান)
মারক_স

7

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

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


1
মজার বিষয় লক্ষণীয় বিষয় হল যে জো চ্যাংয়ের উদ্ধৃতিটি তার অনুমানের উপর ভিত্তি করে হিপগুলির জন্য 20-30% এর দক্ষতার সুবিধাটি চিহ্নিত করেছে যা নিবন্ধের 9 ই মার্চ আপডেটে একই রকম সুবিধা বলে চিহ্নিত করা হয়েছে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.