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

MySQL/PostgreSQL में IN कीवर्ड की स्पीड

PostgreSQL में, आपको यहां जो मिलेगा वह अंतर्निहित तालिका पर निर्भर करता है, इसलिए आपको अपने डेटा के उपयोगी सबसेट के विरुद्ध कुछ नमूना प्रश्नों पर EXPLAIN ANALYZE का उपयोग करना चाहिए ताकि यह पता लगाया जा सके कि ऑप्टिमाइज़र क्या करने जा रहा है (सुनिश्चित करें कि टेबल आप के खिलाफ चल रहे हैं, उनका विश्लेषण भी किया गया है)। IN को दो अलग-अलग तरीकों से संसाधित किया जा सकता है, और इसलिए आपको यह पता लगाने के लिए कुछ नमूनों को देखने की आवश्यकता है कि आपके डेटा के लिए किस विकल्प का उपयोग किया जा रहा है। आपके प्रश्न का कोई सामान्य सामान्य उत्तर नहीं है।

जहां तक ​​आपके द्वारा अपने संशोधन में जोड़े गए विशिष्ट प्रश्न का संबंध है, एक तुच्छ डेटा सेट के विरुद्ध, जिसमें कोई अनुक्रमणिका शामिल नहीं है, यहां आपको प्राप्त होने वाली दो क्वेरी योजनाओं का एक उदाहरण दिया गया है:

postgres=# explain analyze select * from x where s in ('123','456');
 Seq Scan on x  (cost=0.00..84994.69 rows=263271 width=181) (actual time=0.015..1819.702 rows=247823 loops=1)
   Filter: (s = ANY ('{123,456}'::bpchar[]))
 Total runtime: 1931.370 ms

postgres=# explain analyze select * from x where s='123' or s='456';
 Seq Scan on x  (cost=0.00..90163.62 rows=263271 width=181) (actual time=0.014..1835.944 rows=247823 loops=1)
   Filter: ((s = '123'::bpchar) OR (s = '456'::bpchar))
 Total runtime: 1949.478 ms

वे दो रनटाइम अनिवार्य रूप से समान हैं, क्योंकि वास्तविक प्रसंस्करण समय तालिका में अनुक्रमिक स्कैन पर हावी है; कई बार दौड़ने से पता चलता है कि दोनों के बीच का अंतर रन टू रन एरर के नीचे है। जैसा कि आप देख सकते हैं, PostgreSQL अपने किसी भी फ़िल्टर का उपयोग करने में IN केस को बदल देता है, जिसे हमेशा ORs की एक श्रृंखला की तुलना में तेज़ी से निष्पादित करना चाहिए। दोबारा, यह मामूली मामला जरूरी नहीं है कि आप एक गंभीर प्रश्न पर जो देखेंगे, उसका प्रतिनिधि है जहां इंडेक्स और इसी तरह शामिल हैं। भले ही, OR कथनों की एक श्रृंखला के साथ मैन्युअल रूप से INs को बदलना कभी भी तेज़ नहीं होना चाहिए, क्योंकि अनुकूलक के पास काम करने के लिए अच्छा डेटा होने पर यहाँ करने के लिए सबसे अच्छी बात है।

सामान्य तौर पर, PostgreSQL MySQL ऑप्टिमाइज़र की तुलना में जटिल प्रश्नों को अनुकूलित करने के लिए अधिक तरकीबें जानता है, लेकिन यह आपके द्वारा ऑप्टिमाइज़र को काम करने के लिए पर्याप्त डेटा दिए जाने पर भी बहुत अधिक निर्भर करता है। PostgreSQL विकी के "प्रदर्शन अनुकूलन" खंड पर पहला लिंक अनुकूलक से अच्छे परिणाम प्राप्त करने के लिए आवश्यक सबसे महत्वपूर्ण चीजों को शामिल करता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जब WHERE में चर होते हैं तो MySQL क्वेरी इंडेक्स का उपयोग नहीं करती है

  2. mysql-अजगर संयोजन समस्या:यूनिकोड डेटाटाइप को कैसे बल दें?

  3. अधिकतम मिश्रित स्ट्रिंग/इंट कॉलम का चयन कैसे करें?

  4. गतिरोध के बाद MySQL में लेनदेन को फिर से शुरू करना

  5. MySQL क्वेरी से फ़ील्ड प्रकार कैसे वापस करें?