This query is taking long time to execute. Anybody tell me how to optimize this query?
SELECT distinct(node.nid) AS nid ,
CAST((LENGTH(node_data_field_pdfextract.field_pdfextract_value) - LENGTH(REPLACE(LOWER(node_data_field_pdfextract.field_pdfextract_value) , 'test', ''))) / LENGTH('test') AS UNSIGNED ) AS name_match ,
node.title AS node_title,
node_data_field_first_name.field_cj_article_author_name_value,
node_data_field_first_name.field_first_name_value
FROM ram_node node
LEFT JOIN
(SELECT td.tid,
tn.vid AS revision
FROM ram_term_data td
INNER JOIN ram_term_node tn ON tn.tid = td.tid
WHERE td.vid IN (12,
15,
14)) term_data_node ON node.vid = term_data_node.revision
LEFT JOIN ram_content_type_cj_article node_data_field_first_name ON node.vid = node_data_field_first_name.vid
LEFT JOIN ram_node_revisions node_revisions ON node.vid = node_revisions.vid
LEFT JOIN ram_term_node term_node ON node.vid = term_node.vid
LEFT JOIN ram_term_data term_data ON term_node.tid = term_data.tid
LEFT JOIN ram_content_field_pdfextract node_data_field_pdfextract ON node.vid = node_data_field_pdfextract.vid
LEFT JOIN ram_uc_products uc_products ON node.vid = uc_products.vid
WHERE (node.status = 1)
AND (node.type IN ('cj_article'))
AND ((UPPER(node_revisions.body) LIKE UPPER('%test%'))
OR UPPER(node_data_field_pdfextract.field_pdfextract_value) LIKE UPPER('%test%'))
AND (UPPER(node.title) LIKE UPPER('%%'))
ORDER BY name_match DESC;