मैं ऐसी स्थिति के बारे में सोच रहा हूं जहां मेरे पास उच्च घनत्व वाले दो कॉलम हैं लेकिन ये कॉलम स्वतंत्र नहीं हैं।
परिभाषा
यहाँ यह उस तालिका की परिभाषा है जिसे मैंने परीक्षण के उद्देश्य से बनाया है।
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
जैसा कि उम्मीद की जाती है कि क्वेरी ऑप्टिमाइज़र पंक्तियों की सटीक संख्या का अनुमान लगाता है।
चरण 2: फ़िल्टरिंग col2 द्वारा
SELECT * FROM StatsTest WHERE col2=1
फिर से हमारे पास एक सही अनुमान है।
चरण 3: फ़िल्टरिंग द्वारा col1 और col2
SELECT * FROM StatsTest WHERE col1=1 AND col2=1
यहाँ अनुमान पंक्तियों की वास्तविक संख्या के करीब होने से दूर है।
समस्या यह है कि क्वेरी विश्लेषक की आशय यह मानते हैं कि col1 और col2 स्वतंत्र हैं, लेकिन वे नहीं हैं।
चरण 4: कोल 4 द्वारा फ़िल्टरिंग
SELECT * FROM StatsTest WHERE col4 = 11
मैं चरण 3 में प्रश्न के रूप में एक ही परिणाम प्राप्त करने के लिए col4 = 11 के आधार पर फ़िल्टर कर सकते हैं, क्योंकि col4 एक गणना स्तंभ है और जिस तरह के अनुसार यह परिभाषित किया गया है col1 = 1 और col2 = 1 के बराबर है col4 = 11 यहाँ, तथापि , जैसा कि अनुमान था कि अनुमान सही है।
निष्कर्ष / प्रश्न
Available क्या यह कृत्रिम और अकुशल समाधान एकमात्र उपलब्ध विकल्प है जो दो या दो से अधिक स्वतंत्र स्तंभों को छानने से निपटने पर सटीक अनुमान प्राप्त करने के लिए है? ? वास्तविक परिशुद्धता प्राप्त करने के लिए गणना किए गए कॉलम एस्ट्रिजेक्टली नेकसेरी द्वारा परिकलित कॉलम और फिल्टर है?
Sqlfield में उदाहरण