मैंने पाया कि 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 सेकंड का समय लग रहा था। इसमें काफी सुधार हुआ है।