Saya menemukan 2 hal yang memperlambat kueri saya secara drastis dan memperbaikinya.
Untuk menjawab soal pertama, diperlukan tanda kurung di sekeliling "MATCH AGAINST OR MATCH AGAINST":
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 )
)
Saya tidak mengerti cara menggunakan EXPLAIN SELECT
, tapi itu cukup membantu, jadi terima kasih! Ini mengurangi angka pertama 16076 baris menjadi 143. Saya kemudian melihat dua lainnya dengan lebih dari 23 dan 25 ribu baris. Itu penyebabnya dari baris ini:
LEFT JOIN ( SELECT `product_id`, `image`, `swatch` FROM `product_images` WHERE `sequence` = 0) AS c
ON (a.`product_id` = c.`product_id`)
Ada alasan mengapa saya melakukan ini sejak awal, yang kemudian berubah. Ketika saya mengubahnya, saya tidak menyadari bahwa saya dapat melakukan LEFT JOIN
yang normal :
LEFT JOIN `product_images` AS c
ON (a.`product_id` = c.`product_id`)
Ini membuat kueri terakhir saya seperti ini:(dan JAUH lebih cepat berubah dari 196 detik menjadi 0,0084 atau lebih)
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
Oh, dan bahkan sebelum saya melakukan pencarian teks lengkap dengan beberapa tabel, butuh sekitar 1/2 detik. Ini jauh lebih baik.