হোয়াট পয়েন্টে কি একটি সূচক থাকা দক্ষ হয়ে ওঠে


9

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

এই সীমাটি কোথায় হবে সে সম্পর্কে কেউ কি জানেন, বা এমন কোনও সংস্থান সম্পর্কে জানেন যা আমাকে সঠিক দিকে নির্দেশ করবে?


আপনার আবেদনের জন্য পঠন / লেখার অনুপাত কী? যদি আপনি সত্যিই নিবিড়ভাবে লেখেন তবে সম্ভবত এটি সেই বিন্দু যেখানে আপনার লেখার ট্রেড অফকে বিবেচনা করা দরকার, তবে এটি যদি সাধারণ প্রয়োগ হয় তবে আমি প্রয়োজনীয় সূচকটি 99% ক্ষেত্রে যুক্ত করতাম (টেবিলগুলি সাধারণত বেড়ে যায়, তারা খুব কমই বলে থাকে) আকারে ফিরে যান)।
মেরিয়ান

উত্তর:


12

সঠিক সীমাটি সময়ের আগে নির্ধারণ করা সত্যিই কঠিন hard

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

একটি দক্ষ (অবিচ্ছিন্ন) সূচক

  • দুর্দান্ত নির্বাচনের প্রস্তাব দেয় , উদাহরণস্বরূপ মোট সারিগুলির মধ্যে খুব সামান্য শতাংশ (<1%, <2%) প্রদান করে। যদি নির্বাচিততা প্রদত্ত না হয় - এসকিউএল সার্ভারের ক্যোয়ারী অপ্টিমাইজার সম্ভবত এই সূচকটিকে উপেক্ষা করবে

  • আদর্শভাবে ক্যোয়ারীটি আবরণ করা উচিত , অর্থাত্ কোয়েরির জন্য প্রয়োজনীয় সমস্ত তেহ কলামগুলি ফিরিয়ে দিন। যদি আপনি একটি সূচক তৈরি করতে পারেন যার 1 বা 2 সূচক কলাম রয়েছে, এবং অন্তর্ভুক্ত কলামগুলির মতো অন্য মুষ্টিমেয় (2-4) কলামগুলি অন্তর্ভুক্ত করে এবং এইভাবে আপনি একটি ক্যোয়ারী কভার করতে পারেন - তবে সম্ভাবনাগুলি হ'ল ক্যোরি অপটিমাইজার এই সূচকটি ব্যবহার করবে। যার অর্থ হ'ল: যদি আপনার কোড সর্বদা সমস্ত কলামগুলিSELECT * ..... আনতে ব্যবহার করে তবে সূচকগুলি ব্যবহারের সম্ভাবনা হ্রাস পায় - বেশ নাটকীয়ভাবে, আসলে

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

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


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

6

আপনি কেবল 10 টি সারি দিয়ে একটি সূচক থেকে উন্নতি দেখতে পাবেন।

আমার মেশিনে নিম্নলিখিত পরীক্ষায় একটি সূচক 10.5সেকেন্ডে সমাপ্ত সংস্করণ এবং 9.8সেকেন্ডে সূচক সহ সংস্করণ (3 রানের বেশি ধারাবাহিক)।

এই ক্ষেত্রে সূচকটি কেবলমাত্র 1 টি পৃষ্ঠা পৃষ্ঠা নিয়ে গঠিত তবে স্লট অ্যারেটি সূচক কী ক্রমে অর্ডার করা হওয়ায় এটির উপস্থিতি এসকিউএল সার্ভারকে সমস্ত 10 তে একত্রিত করার পরিবর্তে কেবল আগ্রহের একক সারিতে ফিরে আসতে দেয়।

CREATE TABLE T
(
X INT,
Y CHAR(100) NULL
)

INSERT INTO T (X)
SELECT number 
FROM master..spt_values
WHERE type='P' AND number BETWEEN 1 AND 10

set nocount on;

DECLARE @I INT, @X INT

DECLARE @Time DATETIME2(7) = SYSUTCDATETIME()

SET @I = 1
    WHILE (@I < 1000000)
    BEGIN
    SELECT @X = MAX(X)
    FROM T
    SET @I += 1
    END

SELECT DATEDIFF(MICROSECOND, @Time, SYSUTCDATETIME())

CREATE CLUSTERED INDEX IX ON T(X)
SET @Time = SYSUTCDATETIME()
SET @I = 1
    WHILE (@I < 1000000)
    BEGIN
    SELECT @X = MAX(X)
    FROM T
    SET @I += 1
    END

SELECT DATEDIFF(MICROSECOND, @Time, SYSUTCDATETIME())

DROP TABLE T

সন্নিবেশগুলি কি একইভাবে প্রভাবিত হয়, না ধীরগতি কম?
SeanVDH

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

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