सांख्यिकी। क्या बहुरंगी हिस्टोग्राम संभव है?


13

मैं ऐसी स्थिति के बारे में सोच रहा हूं जहां मेरे पास उच्च घनत्व वाले दो कॉलम हैं लेकिन ये कॉलम स्वतंत्र नहीं हैं।

परिभाषा

यहाँ यह उस तालिका की परिभाषा है जिसे मैंने परीक्षण के उद्देश्य से बनाया है।

CREATE TABLE [dbo].[StatsTest](
    [col1] [int] NOT NULL,  --can take values 1 and 2 only
    [col2] [int] NOT NULL,  --can take integer values from 1 to 4 only
    [col3] [int] NOT NULL,  --integer. it has not relevance just to ensure that each row is different
    [col4]  AS ((10)*[col1]+[col2])  --a computed column ensuring that if two rows have different values in col1 or col2 have different values in col4 
) ON [PRIMARY]

डेटा

प्रयोग के लिए डेटा निम्नलिखित है

col1    col2    col3    col4
1       1       1       11
1       2       2       12
1       2       3       12
1       3       4       13
1       3       5       13
1       3       6       13
1       4       7       14
1       4       8       14
1       4       9       14
1       4       10      14
2       1       11      21
2       1       12      21
2       1       13      21
2       1       14      21
2       2       15      22
2       2       16      22
2       2       17      22
2       3       18      23
2       3       19      23
2       4       20      24

चरण 1: col1 द्वारा फ़िल्टरिंग

SELECT * FROM StatsTest WHERE col1=1

जैसा कि उम्मीद की जाती है कि क्वेरी ऑप्टिमाइज़र पंक्तियों की सटीक संख्या का अनुमान लगाता है। पंक्तियों की वास्तविक संख्या = 10 और पंक्तियों की अनुमानित संख्या = 10

चरण 2: फ़िल्टरिंग col2 द्वारा

SELECT * FROM StatsTest WHERE col2=1

फिर से हमारे पास एक सही अनुमान है।

पंक्तियों की वास्तविक संख्या = 5 और पंक्तियों की अनुमानित संख्या = 5

चरण 3: फ़िल्टरिंग द्वारा col1 और col2

SELECT * FROM StatsTest WHERE col1=1 AND col2=1

यहाँ अनुमान पंक्तियों की वास्तविक संख्या के करीब होने से दूर है। पंक्तियों की वास्तविक संख्या = 1 और अनुमानित संख्या पंक्तियों की संख्या = 3,53553

समस्या यह है कि क्वेरी विश्लेषक की आशय यह मानते हैं कि col1 और col2 स्वतंत्र हैं, लेकिन वे नहीं हैं।

चरण 4: कोल 4 द्वारा फ़िल्टरिंग

SELECT * FROM StatsTest WHERE col4 = 11

मैं चरण 3 में प्रश्न के रूप में एक ही परिणाम प्राप्त करने के लिए col4 = 11 के आधार पर फ़िल्टर कर सकते हैं, क्योंकि col4 एक गणना स्तंभ है और जिस तरह के अनुसार यह परिभाषित किया गया है col1 = 1 और col2 = 1 के बराबर है col4 = 11 यहाँ, तथापि , जैसा कि अनुमान था कि अनुमान सही है।

पंक्तियों की वास्तविक संख्या = 1 और पंक्तियों की अनुमानित संख्या = 1

निष्कर्ष / प्रश्न

Available क्या यह कृत्रिम और अकुशल समाधान एकमात्र उपलब्ध विकल्प है जो दो या दो से अधिक स्वतंत्र स्तंभों को छानने से निपटने पर सटीक अनुमान प्राप्त करने के लिए है? ? वास्तविक परिशुद्धता प्राप्त करने के लिए गणना किए गए कॉलम एस्ट्रिजेक्टली नेकसेरी द्वारा परिकलित कॉलम और फिल्टर है?

Sqlfield में उदाहरण


Col1 / 2 पर कुछ इंडेक्स क्यों नहीं बनाए जाते?
LowlyDBA

वास्तव में मैंने किया था, लेकिन मैंने यहां शामिल नहीं किया क्योंकि यह काम नहीं करता था। हिस्टोग्राम के लिए केवल पहला स्तंभ माना जाता है और घनत्व केवल भिन्न मानों को मानता है और उनका वितरण नहीं
JGA

जवाबों:


15

क्या बहुरंगी हिस्टोग्राम संभव है?

सच नहीं बहुआयामी हिस्टोग्राम, नहीं।

क्या यह कृत्रिम और अशुभ समाधान एकमात्र उपलब्ध विकल्प है जो दो या दो से अधिक स्वतंत्र स्तंभों को छानने से निपटने पर सटीक अनुमान प्राप्त करने के लिए है?

SQL सर्वर "मल्टी-कॉलम" आंकड़ों का समर्थन करता है , लेकिन वे केवल पहले नाम वाले कॉलम पर हिस्टोग्राम के अलावा औसत घनत्व (सहसंबंध) की जानकारी कैप्चर करते हैं। वे केवल समानता की तुलना के लिए उपयोगी हैं।

औसत घनत्व की जानकारी किसी भी विवरण को कैप्चर नहीं करती है, इसलिए आपको दो-कॉलम सांख्यिकी ऑब्जेक्ट पर किसी भी जोड़ी के मूल्यों के लिए समान चयनात्मकता मिलेगी । कुछ मामलों में, बहु-स्तंभ आँकड़े पर्याप्त अच्छे हो सकते हैं, और कुछ नहीं से बेहतर। मल्टी-कॉलम आँकड़े स्वचालित रूप से मल्टी-कॉलम इंडेक्स पर बनाए जाते हैं।

SQL सर्वर संस्करण के आधार पर, आप फ़िल्टर किए गए अनुक्रमित और फ़िल्टर्ड आँकड़ों का उपयोग करने में भी सक्षम हो सकते हैं :

-- Filtered statistics example
CREATE STATISTICS stats_StatsTest_col2_col1_eq_1
ON dbo.StatsTest (col2)
WHERE col1 = 1;

CREATE STATISTICS stats_StatsTest_col2_col1_eq_2
ON dbo.StatsTest (col2)
WHERE col1 = 2;

या आप एक अनुक्रमित दृश्य (जो अपने स्वयं के अनुक्रमित और आंकड़ों का समर्थन कर सकते हैं) का निर्माण कर सकते हैं। अनुक्रमित दृश्य DATE_CORRELATION_OPTIMIZATIONडेटाबेस सेटिंग के पीछे का तंत्र है , जो अंतर-तालिका सहसंबंधों के लिए एक छोटी-सी सुविधा है, लेकिन जो प्रश्न की भावना पर लागू होती है।

क्या गणना स्तंभ और फ़िल्टर वास्तविक गणना प्राप्त करने के लिए गणना किए गए स्तंभ द्वारा कड़ाई से आवश्यक है?

यह एकमात्र तरीका नहीं है। पहले से बताई गई बातों के अलावा, आप गणना किए गए कॉलम की सटीक पाठ परिभाषा को भी निर्दिष्ट कर सकते हैं और ऑप्टिमाइज़र आमतौर पर गणना किए गए कॉलम के आंकड़ों से मेल खाएगा।

मल्टी-कॉलम सहसंबंधों के बारे में बनाई गई धारणाओं को बदलने वाले झंडे भी हैं। इसके अलावा, SQL सर्वर 2014 में डिफ़ॉल्ट सहसंबंध की धारणा (नए कार्डिनैलिटी अनुमानक सक्षम होने के साथ) को इंडिपेंडेंस से एक्सपेंन्शियल बैकऑफ़ (अधिक विवरण यहाँ और यहाँ ) में बदल दिया गया है । अंततः, यह सिर्फ एक अलग धारणा है। यह कई मामलों में बेहतर होगा, और दूसरों में बदतर होगा।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.