इस तरह की तुलना का कोई मतलब नहीं है, क्योंकि आप सेब की तुलना संतरे से कर रहे हैं।
उनकी योजनाएँ भिन्न हो सकती हैं।
यह सरल उदाहरण देखें:http:/ /sqlfiddle.com/#!9/98678/2
create table account_range(
is_active int,
range_start int,
range_end int
);
insert into account_range values
(1,-20,100), (1,10,30);
पहली क्वेरी 2 पंक्तियां देती है:
select * from account_range
where is_active = 1 and 25 between range_start AND range_end;
| is_active | range_start | range_end |
|-----------|-------------|-----------|
| 1 | -20 | 100 |
| 1 | 10 | 30 |
दूसरी क्वेरी केवल 1 पंक्ति देती है:
SELECT * FROM account_range
WHERE
is_active = 1 AND
range_start = (SELECT MAX(range_start)
FROM account_range
WHERE range_start <= 25
) AND
range_end = (SELECT MIN(range_end)
FROM account_range
WHERE range_end >= 25
)
| is_active | range_start | range_end |
|-----------|-------------|-----------|
| 1 | 10 | 30 |
इस क्वेरी को तेज करने के लिए (पहला वाला), "बिटमैप और" ऑपरेशन के साथ दो बिटमैप इंडेक्स का उपयोग किया जा सकता है - लेकिन MySql में ऐसी कोई सुविधा नहीं है।
एक अन्य विकल्प एक स्थानिक इंडेक्स है ( उदाहरण के लिए PostgreSql में GIN इंडेक्स:http://www.postgresql। org/docs/current/static/textsearch-indexes.html
).
और दूसरा विकल्प है स्टार ट्रांसफ़ॉर्मेशन (या स्टार स्कीमा) - आपको इस टेबल को दो "आयाम" या "माप" टेबल और एक "तथ्य" टेबल में "विभाजित" करने की ज़रूरत है .. .. लेकिन यह बहुत व्यापक विषय है, यदि आप और जानना चाहते हैं तो आप यहां से शुरू कर सकते हैं:https:/ /en.wikipedia.org/wiki/Star_schema