Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySql स्वचालित रूप से BETWEEN क्वेरी का अनुकूलन क्यों नहीं करता है?

इस तरह की तुलना का कोई मतलब नहीं है, क्योंकि आप सेब की तुलना संतरे से कर रहे हैं।
उनकी योजनाएँ भिन्न हो सकती हैं।

यह सरल उदाहरण देखें: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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Percona XtraDB क्लस्टर Kubernetes ऑपरेटर का अवलोकन

  2. MySQL में लाइन ब्रेक और कैरिज रिटर्न (\r\n) ढूँढना

  3. mysql_fetch_assoc को स्वचालित रूप से रिटर्न डेटा प्रकारों का पता लगाएं?

  4. MySQL:अपर कैमल केस (पास्कल केस) में टेबल को नाम नहीं दे सकता

  5. MySQL TINYINT अहस्ताक्षरित के रूप में