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

MySQL या MATCH एकाधिक तालिकाओं पर लटकता है (बहुत धीमा)

मैंने पाया कि 2 चीजें मेरी क्वेरी को बहुत धीमा कर रही हैं और उन्हें ठीक कर दिया है।

पहली समस्या का उत्तर देने के लिए, इसे संपूर्ण "मैच अगेंस्ट या मैच अगेंस्ट" के चारों ओर कोष्ठकों की आवश्यकता थी:

WHERE 
    b.`website_id` = %d
    AND b.`status` = %d
    AND b.`active` = %d 
    AND ( 
        MATCH( a.`name`, a.`sku`, a.`description` ) AGAINST ( '%s' IN BOOLEAN MODE ) 
        OR MATCH ( d.`name` ) AGAINST ( '%s' IN BOOLEAN MODE )
    )

मुझे समझ नहीं आया कि EXPLAIN SELECT . का उपयोग कैसे करें , लेकिन इससे काफी मदद मिली, इसलिए धन्यवाद! इसने पहली संख्या 16076 पंक्तियों को घटाकर 143 कर दिया। फिर मैंने अन्य दो को 23 और 25 हजार से अधिक पंक्तियों के साथ देखा। यह इस लाइन के कारण था:

LEFT JOIN ( SELECT `product_id`, `image`, `swatch` FROM `product_images` WHERE `sequence` = 0) AS c 
    ON (a.`product_id` = c.`product_id`)

एक कारण था कि मैं पहली बार ऐसा कर रहा था, जो तब बदल गया। जब मैंने इसे बदला, तो मुझे नहीं पता था कि मैं एक सामान्य LEFT JOIN कर सकता हूं :

LEFT JOIN `product_images` AS c 
    ON (a.`product_id` = c.`product_id`)

यह मेरी अंतिम क्वेरी को इस तरह बनाता है:(और बहुत तेजी से 196 सेकंड से 0.0084 या तो तक चला गया)

SELECT 
    a.`product_id`, a.`name`, a.`slug`, a.`description`, b.`list_price`, b.`price`, 
    c.`image`, c.`swatch`, e.`name` AS industry, 
    MATCH( a.`name`, a.`sku`, a.`description` ) AGAINST ( '%s' IN BOOLEAN MODE ) AS relevance 
FROM 
    `products` AS a LEFT JOIN `website_products` AS b 
        ON (a.`product_id` = b.`product_id`) 
    LEFT JOIN `product_images` AS c 
        ON (a.`product_id` = c.`product_id`) 
    LEFT JOIN `brands` AS d 
        ON (a.`brand_id` = d.`brand_id`) 
    INNER JOIN `industries` AS e 
        ON (a.`industry_id` = e.`industry_id`) 
WHERE 
    b.`website_id` = %d
    AND b.`status` = %d
    AND b.`active` = %d
    AND c.`sequence` = %d
    AND ( 
        MATCH( a.`name`, a.`sku`, a.`description` ) AGAINST ( '%s' IN BOOLEAN MODE ) 
        OR MATCH( d.`name` ) AGAINST( '%s' IN BOOLEAN MODE ) 
    )
GROUP BY a.`product_id` 
ORDER BY relevance DESC 
LIMIT 0, 9

ओह, और इससे पहले कि मैं कई तालिकाओं के साथ एक पूर्ण पाठ खोज कर रहा था, इसमें लगभग 1/2 सेकंड का समय लग रहा था। इसमें काफी सुधार हुआ है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL गिनती वाले सभी परिणामों को हटा दें (*) =1

  2. mysql चुनें से चुनें

  3. mysqli_query () हमेशा सच लौटाता है

  4. जावा का उपयोग करके दूरस्थ mysql डेटाबेस तक कैसे पहुँचें?

  5. उन तिथियों के लिए शून्य लौटाता है जो मौजूद नहीं हैं MYSQL GROUP BY