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

पदानुक्रमित डेटा में MySQL प्रश्नों का अनुकूलन

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

तो, मान लें कि 'c, v, k, u' ऑर्डर सबसे अच्छा है।

SELECT DISTINCT
  `v`.`key`,
  `u`.`val`
FROM
  `VertexDictionary`  AS `u`
  JOIN `SpecialKeys`       AS `k` ON (`k`.`x`, `k`.`key`) = (`u`.`x`, `u`.`key`)
  JOIN `VertexDictionary`  AS `v`
  JOIN `ConnectedVertices` AS `c` ON (`u`.`x`, `u`.`y`  ) = (`c`.`tail_x`, `c`.`tail_y`)
           AND (`v`.`x`, `v`.`y`  ) = (`c`.`head_x`, `c`.`head_y`)
WHERE
  `v`.`x` = X
;

'पंक्तियाँ' 'c/u, k, v' क्रम का सुझाव देंगी, लेकिन यह डेटा पर निर्भर करती है:

SELECT DISTINCT
  `v`.`key`,
  `u`.`val`
FROM
  `VertexDictionary`  AS `u`
  JOIN `VertexDictionary`  AS `v`
  JOIN `SpecialKeys`       AS `k` ON (`k`.`x`, `k`.`key`) = (`u`.`x`, `u`.`key`)
  JOIN `ConnectedVertices` AS `c` ON (`u`.`x`, `u`.`y`  ) = (`c`.`tail_x`, `c`.`tail_y`)
                                 AND (`v`.`x`, `v`.`y`  ) = (`c`.`head_x`, `c`.`head_y`)
 WHERE
  `v`.`x` = X
;

आशा है कि यह मदद करता है।

अपडेट करें (वर्चर जॉइन से बचना):

SELECT DISTINCT
  `v`.`key`,
  `u`.`val`
FROM
       `ConnectedVertices` AS `c`
  JOIN `VertexDictionary`  AS `u` ON (`u`.`x`, `u`.`y`  ) = (`c`.`tail_x`, `c`.`tail_y`)
  JOIN `VertexDictionary`  AS `v` ON (`v`.`x`, `v`.`y`  ) = (`c`.`head_x`, `c`.`head_y`)
WHERE
  (`u`.`x`, `u`.`key`) IN (SELECT `k`.`x`, `k`.`key` FROM `SpecialKeys` AS `k`)
AND
  `v`.`x` = X
;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक पंक्ति अपडेट करें, लेकिन अगर कोडनिर्देशक में पंक्ति मौजूद नहीं है तो डालें

  2. $stmt->fetch(PDO::FETCH_ASSOC) का उपयोग करते समय डेटा कैसे आउटपुट करें;

  3. दो तिथियों के बीच तिथियां प्राप्त करें

  4. MySQL संग्रहीत कार्यविधि सिंटैक्स त्रुटि BEGIN . के बाद

  5. ListArray वही रिकॉर्ड सहेज रहा है