ecommerce icon indicating copy to clipboard operation
ecommerce copied to clipboard

ENT-3072: Added index for ProductAttributeValue

Open irfanuddinahmad opened this issue 5 years ago • 0 comments

Description: This PR optimises MySQL offer_conditionaloffer select by indexing catalogue_productattributevalue. Newrelic recommends the following for this model:

image

SELECT (`voucher_voucher_offers`.`voucher_id`) AS `_prefetch_related_val_voucher_id`, `offer_conditionaloffer`.`id`, `offer_conditionaloffer`.`name`, `offer_conditionaloffer`.`slug`, `offer_conditionaloffer`.`description`, `offer_conditionaloffer`.`offer_type`, `offer_conditionaloffer`.`exclusive`, `offer_conditionaloffer`.`status`, `offer_conditionaloffer`.`condition_id`, `offer_conditionaloffer`.`benefit_id`, `offer_conditionaloffer`.`priority`, `offer_conditionaloffer`.`start_datetime`, `offer_conditionaloffer`.`end_datetime`, `offer_conditionaloffer`.`max_global_applications`, `offer_conditionaloffer`.`max_user_applications`, `offer_conditionaloffer`.`max_basket_applications`, `offer_conditionaloffer`.`max_discount`, `offer_conditionaloffer`.`total_discount`, `offer_conditionaloffer`.`num_applications`, `offer_conditionaloffer`.`num_orders`, `offer_conditionaloffer`.`redirect_url`, `offer_conditionaloffer`.`date_created`, `offer_conditionaloffer`.`email_domains`, `offer_conditionaloffer`.`sales_force_id`, `offer_conditionaloffer`.`max_user_discount`, `offer_conditionaloffer`.`site_id`, `offer_conditionaloffer`.`partner_id`, `offer_conditionaloffer`.`enterprise_contract_metadata_id` FROM `offer_conditionaloffer` INNER JOIN `voucher_voucher_offers` ON (`offer_conditionaloffer`.`id` = `voucher_voucher_offers`.`conditionaloffer_id`) WHERE `voucher_voucher_offers`.`voucher_id` IN (SELECT DISTINCT V0.`id` FROM `voucher_voucher` V0 INNER JOIN `voucher_couponvouchers_vouchers` V1 ON (V0.`id` = V1.`voucher_id`) INNER JOIN `voucher_couponvouchers` V2 ON (V1.`couponvouchers_id` = V2.`id`) LEFT OUTER JOIN `voucher_voucher_offers` V4 ON (V0.`id` = V4.`voucher_id`) LEFT OUTER JOIN `offer_conditionaloffer` V5 ON (V4.`conditionaloffer_id` = V5.`id`) LEFT OUTER JOIN `offer_offerassignment` V6 ON (V5.`id` = V6.`offer_id`) LEFT OUTER JOIN `voucher_voucherapplication` V7 ON (V0.`id` = V7.`voucher_id`) WHERE (V2.`coupon_id` IN (SELECT DISTINCT U0.`id` FROM `catalogue_product` U0 INNER JOIN `catalogue_productattributevalue` U1 ON (U0.`id` = U1.`product_id`) INNER JOIN `catalogue_productattribute` U2 ON (U1.`attribute_id` = U2.`id`) INNER JOIN `catalogue_productclass` U3 ON (U0.`product_class_id` = U3.`id`) WHERE (U1.`value_text` = %s AND U2.`code` = %s AND U3.`name` = %s)) AND (V6.`id` IN (SELECT U0.`id` FROM `offer_offerassignment` U0 WHERE (U0.`voucher_application_id` IS ? AND U0.`status` IN (%s, %s) AND U0.`user_email` = %s)) OR V7.`id` IN (SELECT U0.`id` FROM `voucher_voucherapplication` U0 WHERE U0.`user_id` = %s)))) ORDER BY `offer_conditionaloffer`.`priority` DESC, `offer_conditionaloffer`.`id` ASC

irfanuddinahmad avatar Jul 01 '20 06:07 irfanuddinahmad