2016-11-01 4 views
1

Может кто-то помочь мне изменения в этом запросекак избежать полного сканирования таблицы для моего запроса MySQL

UPDATE APA_Pended_Demand 
SET APA_Pended_Demand.genericDemandId=( 
    SELECT APA_Generic_Demand_Details.genericDemandId 
    FROM APA_Generic_Demand_Details 
    WHERE APA_Generic_Demand_Details.demandID=APA_Pended_Demand.demandID 
    AND APA_Pended_Demand.isPend = 1 
    AND APA_Generic_Demand_Details.genericDemandId != '' 
    AND APA_Generic_Demand_Details.genericDemandId IS NOT NULL 
    AND APA_Pended_Demand.reactivateDate > UTC_TIMESTAMP() 
    AND APA_Generic_Demand_Details.status < 300 
    AND APA_Pended_Demand.ID BETWEEN 1 AND 10000 

Индексация приведены для таблицы

PRIMARY KEY (`id`), 
KEY `apgnricdemnddetils_bndnresn` (`abandonReason`), 
KEY `apgnricdmnddetils_prdcttype` (`productType`), 
KEY `apgnricdmnddtils_srcereqrle` (`sourceReqRole`), 
KEY `apgnericdemnddetils_methdin` (`methodIn`), 
KEY `IX1_APA_Generic_Demand_Details` (`status`,`customerReference`,`policyNo`,`genericDemandId`) USING BTREE, 
KEY `IX2_APA_Generic_Demand_Details` (`status`,`schemeReference`,`genericDemandId`) USING BTREE, 
KEY `IX3_APA_Generic_Demand_Details` (`status`,`aggregationKey`,`genericDemandId`) USING BTREE, 
KEY `IX4_APA_Generic_Demand_Details` (`status`,`initiator`,`aggregationKey`,`genericDemandId`) USING BTREE, 
KEY `IX5_APA_Generic_Demand_Details` (`status`,`policyNo`,`genericDemandId`) USING BTREE, 
KEY `IX7_APA_Generic_Demand_Details` (`genericDemandId`) USING BTREE, 
KEY `IX8_APA_Generic_Demand_Details` (`initiator`,`status`) USING BTREE, 

Запрос не использует индекс . Я попытался объяснить для запроса, и он показывает тип как Все и ключи как Нет. Так или иначе, чтобы заставить его использовать индекс или нам нужно изменить запрос?

ответ

1

Используйте обновление присоединиться вместо:

UPDATE APA_Pended_Demand t1 
INNER JOIN APA_Generic_Demand_Details t2 
    ON t1.demandID = t2.demandID 
SET t1.genericDemandId = t2.genericDemandId 
WHERE t1.isPend = 1 AND 
     COALESCE(t2.genericDemandId, '') != '' AND 
     t1.reactivateDate > UTC_TIMESTAMP() AND 
     t2.status < 300 AND 
     t1.ID BETWEEN 1 AND 10000 
+0

Привет Тим, Большое спасибо – Chowdary

+0

@sravan Есть ли причина, почему вы удалили это как правильный ответ? –

Смежные вопросы