অবিচ্ছিন্ন সূচক sertোকান


10

বলুন আমার কাছে এই জাতীয় একটি টেবিল রয়েছে:

create table SomeTable
(
    id int identity(1, 1) not null primary key clustered,
    SomeString1 varchar(50) not null,
    SomeString2 varchar(50) not null
)
go

create nonclustered index IX_SomeString1
on SomeTable(SomeString1)
go

যদি আমি এটি করতাম:

insert into SomeTable(SomeString1, SomeString2)
values('foo', 'bar')
go

এবং প্রকৃত বাস্তবায়ন পরিকল্পনাটি দেখুন, আমি কেবল একটি ক্লাস্টারড ইনডেক্স সন্নিবেশ দেখতে পাচ্ছি । আমি বাস্তবায়ন পরিকল্পনায় একটি নন-ক্লাস্টারড ইনডেক্স সন্নিবেশ কেন দেখছি না ?


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

@ জেএনকে তবে আমি যদি এটি করি select * from SomeTable where String1 = 'foo'তবে আমি দেখতে পাচ্ছি যে ক্যোয়ারী অপ্টিমাইজার প্রকৃতপক্ষে IX_SomeString1কোনও সূচক সন্ধানের জন্য সূচকটি বেছে নেয় । সুতরাং এটি যে সূচক আপডেট করা আবশ্যক, না?

1
আপনি এটির জন্য পরিসংখ্যান তাকান এবং দেখতে পারেন। এটি কার্যকর করার পরিকল্পনা ডিসপ্লেতেও একটি ঘাটতি হতে পারে। আপনি কি এক্সএমএল পরীক্ষা করেছেন?
জেএনকে

1
এসকিউএল সার্ভারটি কতগুলি সারি প্রভাবিত হবে তার উপর নির্ভর করে প্রশস্ত বা সরু পরিকল্পনা ব্যবহার করতে পারে । এটি সূচক রক্ষণাবেক্ষণ অপারেশনগুলি পৃথকভাবে ঘটবে কিনা এবং পরিকল্পনায় আলাদা অপারেশন হিসাবে বা একসাথে প্রদর্শিত হবে এবং সিআই অপারেশনের অংশ হিসাবে প্রদর্শিত হবে কিনা তা নিয়ন্ত্রণ করে।
মার্টিন স্মিথ

1
@ মার্টিনস্মিথ দুর্দান্ত ব্যাখ্যা এবং আমি এটি জানতাম না। লিঙ্ক এবং মন্তব্য করার জন্য ধন্যবাদ। এটি একটি উত্তর হওয়া উচিত, আমি বিশ্বাস করি।

উত্তর:


9

একটি একক সারি সন্নিবেশ করার জন্য আপনি একটি সংকীর্ণ / প্রতি-সারি প্ল্যান পাবেন

INSERT INTO SomeTable(SomeString1, SomeString2)
SELECT TOP 1 type, type
FROM master..spt_values

সংকীর্ণ পরিকল্পনা

আপনি যদি ক্লাস্টারড ইনডেক্স সন্নিবেশ অপারেটরটি নির্বাচন করেন এবং বৈশিষ্ট্যগুলি উইন্ডোটি দেখতে পান তবে আপনি এক্সএমএলে প্রদর্শিত একই তথ্য দেখতে পাবেন।

বৈশিষ্ট্য উইন্ডো

আপনি যদি 1000 সারি চেষ্টা করেন

INSERT INTO SomeTable(SomeString1, SomeString2)
SELECT TOP 1000 type, type
FROM master..spt_values

অপারেশনগুলি আলাদাভাবে বিভক্ত হওয়ার সাথে সাথে আপনি একটি পৃথক প্রশস্ত / প্রতি সূচক পরিকল্পনা পাবেন

প্রশস্ত পরিকল্পনা

দেখুন ওয়াইড বনাম ন্যারো প্ল্যান বা ক্রেগ Freedman এর ব্লগ প্রায় দুই অধিক বিবরণের জন্য


6

গ্রাফিকাল পরিকল্পনা প্রদর্শন বিশ্বাস করবেন না, শুধুমাত্র newbies জন্য। পেশাদাররা সর্বদা এক্সএমএল দেখেন। এনিসির অপারেশন ঠিক সেখানে রয়েছে:

<Update DMLRequestSort="false">
  <Object Database="[testdb]" Schema="[dbo]" Table="[SomeTable]" Index="[PK__SomeTabl__3213E83F4AAF1C98]" IndexKind="Clustered" />
  <Object Database="[testdb]" Schema="[dbo]" Table="[SomeTable]" Index="[IX_SomeString1]" IndexKind="NonClustered" />

5
আমি এটি দীর্ঘ প্রসারিত করে "কেবল নবজাতকদের জন্য" বলব না।
ডেভ মার্কেল

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