I am trying to bring back a string based on an IF statement but it is extremely slow.
It has something to do with the first subquery but I am unsure of how to rearrange this as to bring back the same results but faster.
Here is my SQL:
SELECT IF
(
(
SELECT COUNT(*)
FROM
(
SELECT DISTINCT enquiryId, type
FROM parts_enquiries, parts_service_types AS pst
WHERE parts_enquiries.serviceTypeId = pst.id
) AS parts
WHERE parts.enquiryId = enquiries.id
) > 1, 'Mixed',
(
SELECT DISTINCT type
FROM parts_enquiries, parts_service_types AS pst
WHERE parts_enquiries.serviceTypeId = pst.id AND enquiryId = enquiries.id
)
) AS partTypes
FROM enquiries,
entities
WHERE enquiries.entityId = entities.id
How can I make it faster?
I have modified my original query below, but I am getting the error that subquery returns more than one row:
SELECT
(SELECT
CASE WHEN COUNT(DISTINCT type) > 1 THEN 'Mixed' ELSE `type` END AS type
FROM parts_enquiries
INNER JOIN parts_service_types AS pst ON parts_enquiries.serviceTypeId = pst.id
INNER JOIN enquiries ON parts_enquiries.enquiryId = enquiries.id
INNER JOIN entities ON enquiries.entityId = entities.id
GROUP BY enquiryId) AS partTypes
FROM enquiries,
entities
WHERE enquiries.entityId = entities.id
The following recommendations will help you in your SQL tuning process.
You'll find 3 sections below:
ALTER TABLE `enquiries` ADD INDEX `enquiries_idx_entityid` (`entityId`);
ALTER TABLE `entities` ADD INDEX `entities_idx_id` (`id`);
ALTER TABLE `parts_enquiries` ADD INDEX `parts_enquiries_idx_servicetypeid` (`serviceTypeId`);
ALTER TABLE `parts_service_types` ADD INDEX `parts_types_idx_id` (`id`);
SELECT
IF((SELECT
COUNT(*)
FROM
(SELECT
DISTINCT enquiryId,
type
FROM
parts_enquiries,
parts_service_types AS pst
WHERE
parts_enquiries.serviceTypeId = pst.id) AS parts
WHERE
parts.enquiryId = enquiries.id) > 1, 'Mixed', (SELECT
DISTINCT type
FROM
parts_enquiries,
parts_service_types AS pst
WHERE
parts_enquiries.serviceTypeId = pst.id
AND enquiryId = enquiries.id)) AS partTypes
FROM
enquiries,
entities
WHERE
enquiries.entityId = entities.id