How can I make this below Mysql query more efficient ?
SELECT
DISTINCT crm_task_id,
table_header_id
FROM
table_details
WHERE
table_header_id IN (
SELECT
table_header_id
FROM
table_header
WHERE
crm_campaign_id =196
AND crm_campaign_post_code_id IN (
SELECT
crm_campaign_post_code_id
FROM
crm_campaign_post_code
WHERE
is_display_operator IN (
1, 0
)
)
AND g_user_id IN (
SELECT
g_user_id
FROM
crm_user
WHERE
is_active =1
)
AND DATE_FORMAT( created, '%Y-%m-%d' ) BETWEEN '2015-12-01' AND '2016-01-04'
)
AND crm_task_id NOT IN (
SELECT
crm_task_id
FROM
table_details
WHERE
table_header_id IN (
SELECT
table_header_id
FROM
table_header
WHERE
crm_campaign_id =196
AND crm_post_code_categ_id !=1000
)
)
table_header columns :
| table_header_id | bigint(20)
| created | datetime
| updated | datetime
| createdby | bigint(20)
| updatedby | bigint(20)
| is_active | char(1)
| crm_user_session_id | bigint(20)
| crm_campaign_id | bigint(20)
| crm_post_code_categ_id | bigint(20)
| value | varchar(128)
| crm_campaign_post_code_id | bigint(20)
| crm_filter_id | bigint(20)
| g_user_id | bigint(20)
| session_time | int(100)
table_details Columns:
| table_details_id | bigint(11)
| table_header_id | bigint(11)
| created | datetime
| updated | datetime
| createdby | bigint(11)
| updatedby | bigint(11)
| is_active | smallint(5)
| crm_contact_id | varchar(60)
| crm_task_id | bigint(11)
the above query takes more than 2 seconds to return result, Please can anyone rewrite this query to return result faster !!!
WHEREclause?