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

mysql संग्रहीत कार्यविधि मानक क्वेरी से 20 गुना धीमी है

बस एक अनुमान:

जब आप क्वेरी को हाथ से चलाते हैं, तो व्यंजक WHERE ('test' IS NULL or COL1 = 'test') क्वेरी को पार्स किए जाने पर अनुकूलित किया जा सकता है। पार्सर देख सकता है कि स्ट्रिंग 'test' शून्य नहीं है, इसलिए यह परीक्षण को WHERE COL1 = 'test' . में बदल देता है . और अगर COL1 . पर कोई अनुक्रमणिका है इसका उपयोग किया जाएगा।

हालाँकि, जब आप कोई संग्रहीत कार्यविधि बनाते हैं, तो प्रक्रिया बनने पर पार्सिंग होती है। उस समय, यह नहीं जानता कि @param . क्या है होगा, और क्वेरी को तालिका के अनुक्रमिक स्कैन के रूप में कार्यान्वित करना होगा।

अपनी कार्यविधि को इसमें बदलने का प्रयास करें:

IF @param IS NULL
THEN BEGIN
  SELECT * FROM table1
  UNION ALL
  SELECT * FROM table2
  ...
END;
ELSE BEGIN
  SELECT * FROM table1 WHERE col1 = @param
  UNION ALL
  SELECT * FROM table2 WHERE col1 = @param
  ...
END;
END IF;

मुझे MySQL संग्रहीत कार्यविधियों का अधिक अनुभव नहीं है, इसलिए मुझे यकीन नहीं है कि यह बिल्कुल सही सिंटैक्स है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक 3 अक्षर वाले शब्द के साथ mysql पर पूर्ण पाठ खोज

  2. स्ट्रिंग के आधार पर गतिशील रूप से PHP ऑब्जेक्ट बनाएं

  3. पीडीओ कॉलम नाम के रूप में कुंजी का उपयोग करके सरणी डालें

  4. इमोजी डेटाबेस नोड में नहीं डाल रहे हैं js mysql

  5. मैक पर libmysqlclient15-dev?