एसक्यूएल सर्वर इंडेक्स बनाम स्टेटिस्टिक


जवाबों:


19

इंडेक्स वास्तविक डेटा (डेटा पेज या इंडेक्स पेज को हम किस इंडेक्स के प्रकार के आधार पर बात कर रहे हैं) और सांख्यिकी स्टोर डेटा डिस्ट्रिब्यूशन के आधार पर स्टोर करते हैं। इसलिए, CREATE INDEXसूचकांक बनाने के लिए डीडीएल होगा (क्लस्टर, नॉन-क्लस्टर्ड आदि) और CREATE STATISTICSतालिका के भीतर स्तंभों पर आंकड़े बनाने के लिए डीडीएल है।

मैं आपको रिलेशनल डेटा के इन पहलुओं के बारे में पढ़ने की सलाह देता हूं। नीचे शुरुआती, परिचयात्मक लेखों के एक जोड़े हैं। ये बहुत व्यापक विषय हैं, और इसलिए उन पर जानकारी बहुत व्यापक और बहुत गहरी जा सकती है। नीचे उनके सामान्य विचार पर पढ़ें, और जब वे उठें तो अधिक विशिष्ट प्रश्न पूछें।

तालिका और सूचकांक संगठन पर
बीओएल संदर्भ क्लस्टर सूचकांक संरचना
पर बीओएल संदर्भ गैर-सूचीबद्ध सूचकांक संरचनाओं पर बीओएल संदर्भ
एसक्यूएल सर्वर सेंट्रल इंडेक्स पर परिचय बीओएल
सांख्यिकी पर संदर्भ

इन दो भागों को कार्रवाई में देखने के लिए एक कार्य उदाहरण दिया गया है (व्याख्या करने के लिए टिप्पणी की गई है):

use testdb;
go

create table MyTable1
(
    id int identity(1, 1) not null,
    my_int_col int not null
);
go

insert into MyTable1(my_int_col)
values(1);
go 100

-- this statement will create a clustered index
-- on MyTable1.  The index key is the id field
-- but due to the nature of a clustered index
-- it will contain all of the table data
create clustered index MyTable1_CI
on MyTable1(id);
go


-- by default, SQL Server will create a statistics
-- on this index.  Here is proof.  We see a stat created
-- with the name of the index, and the consisting stat 
-- column of the index key column
select
    s.name as stats_name,
    c.name as column_name
from sys.stats s
inner join sys.stats_columns sc
on s.object_id = sc.object_id
and s.stats_id = sc.stats_id
inner join sys.columns c
on sc.object_id = c.object_id
and sc.column_id = c.column_id
where s.object_id = object_id('MyTable1');


-- here is a standalone statistics on a single column
create statistics MyTable1_MyIntCol
on MyTable1(my_int_col);
go

-- now look at the statistics that exist on the table.
-- we have the additional statistics that's not necessarily
-- corresponding to an index
select
    s.name as stats_name,
    c.name as column_name
from sys.stats s
inner join sys.stats_columns sc
on s.object_id = sc.object_id
and s.stats_id = sc.stats_id
inner join sys.columns c
on sc.object_id = c.object_id
and sc.column_id = c.column_id
where s.object_id = object_id('MyTable1');


-- what is a stat look like?  run DBCC SHOW_STATISTICS
-- to get a better idea of what is stored
dbcc show_statistics('MyTable1', 'MyTable1_CI');
go

आंकड़ों का एक परीक्षण नमूना इस प्रकार है:

यहाँ छवि विवरण दर्ज करें

ध्यान दें कि सांख्यिकी डेटा वितरण की सम्‍मिलित है। वे SQL सर्वर को एक इष्टतम योजना निर्धारित करने में मदद करते हैं। इसका एक अच्छा उदाहरण है, कल्पना कीजिए कि आप एक भारी वस्तु को जीवन में ले जा रहे हैं। यदि आपको पता था कि उस वजन का कितना भार है क्योंकि उस पर एक वजन अंकन था, तो आप उठाने का सबसे अच्छा तरीका और किन मांसपेशियों के साथ निर्धारित करेंगे। SQL सर्वर आँकड़ों के साथ क्या करता है।

-- create a nonclustered index
-- with the key column as my_int_col
create index IX_MyTable1_MyIntCol
on MyTable1(my_int_col);
go

-- let's look at this index
select
    object_name(object_id) as object_name,
    name as index_name,
    index_id,
    type_desc,
    is_unique,
    fill_factor
from sys.indexes
where name = 'IX_MyTable1_MyIntCol';

-- now let's see some physical aspects
-- of this particular index
-- (I retrieved index_id from the above query)
select *
from sys.dm_db_index_physical_stats
(
    db_id('TestDB'),
    object_id('MyTable1'),
    4,
    null,
    'detailed'
);

हम ऊपर दिए गए उदाहरण से देख सकते हैं कि सूचकांक में वास्तव में डेटा है (सूचकांक के प्रकार के आधार पर, पत्ती पृष्ठ अलग होंगे)।

इस पोस्ट में केवल इन दो बड़े पहलुओं SQL सर्वर का बहुत ही संक्षिप्त विवरण दिखाया गया है । ये दोनों अध्याय, और पुस्तकें ले सकते थे। कुछ संदर्भों को पढ़ें, और फिर आपके पास एक बेहतर समझ होगी।


1
मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन यह उल्लेखनीय है कि एक इंडेक्स विल (ज्यादातर मामलों में) स्वचालित रूप से इंडेक्स के लिए आंकड़े उत्पन्न करता है। वही आँकड़े बनाने के बारे में नहीं कहा जा सकता है।
स्टीव मंगिअली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.