Search code examples
mysqlsqlquery-optimization

How to execute SQL query fast?


I write an SQL query for MySQL which is more than 1500 characters long. This query is working fine but takes approx 1 minute to execute. Is there any way to make it faster? My query is-

SELECT *,`col1`,`col2` FROM (
        SELECT * FROM `tbl1` WHERE NOT EXISTS (SELECT `id` FROM `tbl2` WHERE `tbl2`.`id` = `tbl1`.`id` AND `grade` = 'c1' ) AND wherecondition-4 UNION
        SELECT * FROM `tbl1` WHERE NOT EXISTS (SELECT `id` FROM `tbl2` WHERE `tbl2`.`id` = `tbl1`.`id` AND `grade` = 'c2' ) AND wherecondition-4 UNION
        SELECT * FROM `tbl1` WHERE NOT EXISTS (SELECT `id` FROM `tbl2` WHERE `tbl2`.`id` = `tbl1`.`id` AND `grade` = 'c3' ) AND wherecondition-4 UNION
        SELECT * FROM `tbl1` WHERE NOT EXISTS (SELECT `id` FROM `tbl2` WHERE `tbl2`.`id` = `tbl1`.`id` AND `grade` = 'c4' ) AND wherecondition-4 UNION
        SELECT * FROM `tbl1` WHERE NOT EXISTS (SELECT `id` FROM `tbl2` WHERE `tbl2`.`id` = `tbl1`.`id` AND `grade` = 'c5' ) AND wherecondition-4 ) `tablealias`
        LEFT JOIN `tbl2` ON
        `tablealias`.`id` = `tbl2`.`id`
        ORDER BY `col1` ASC, `col2` ASC;";

Thanks in advance.


Solution

  • Maybe try this

    SELECT *,`col1`,`col2` FROM (
        SELECT * FROM `tbl1` WHERE NOT EXISTS (SELECT `id` FROM `tbl2` WHERE `tbl2`.`id` = `tbl1`.`doe_id` AND `grade` in('c1','c2','c3', 'c4', 'c5') AND wherecondition-4) `tablealias`
        LEFT JOIN `tbl2` ON
        `tablealias`.`id` = `tbl2`.`id`
        ORDER BY `col1` ASC, `col2` ASC;";