The below query finds one id by using the below query format but it seems I have indexed all columns, but it took time to execute between 54.3 seconds – 1.2 mins. What can I try next?
Query:
select
op.ord_prod_id
FROM
ordered_product op,
payment_type pt,
account a,
service s,
payment_method pm,
acct_order ao,
acct_order_item aoi
WHERE
(
(
op.type = 1
OR op.type = 2
)
AND (
pt.description = 'Levis'
AND op.validity_end_date < '2022-09-18 11:24:08 Etc/GMT'
AND op.validity_end_date >= '2022-09-18 00:00:00 Etc/GMT'
AND op.acct_status_id = 1
AND op.is_Renewable = 'T'
AND a.bu_id = 103
)
)
AND pm.type_id = pt.id
AND s.acct_id = a.acct_id
AND op.serv_id = s.serv_id
AND ao.pay_meth_id = pm.pay_method_id
AND aoi.order_id = ao.order_id
AND aoi.ord_prod_id = op.ord_prod_id
ORDER BY
op.validity_end_date ASC
explain plan
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: pt
partitions: NULL
type: ref
possible_keys: PRIMARY,idx_pmttype_descrip,idx_description
key: idx_pmttype_descrip
key_len: 32
ref: const
rows: 1
filtered: 100.00
Extra: Using index; Using temporary; Using filesort
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: pm
partitions: NULL
type: ref
possible_keys: PRIMARY,payment_method_type_id,Idx_type_id,idx_type_id_zip_code_last_digits
key: payment_method_type_id
key_len: 10
ref: ccbuser.pt.id
rows: 3297
filtered: 100.00
Extra: Using index
*************************** 3. row ***************************
id: 1
select_type: SIMPLE
table: ao
partitions: NULL
type: ref
possible_keys: PRIMARY,idx_pay_meth_id
key: idx_pay_meth_id
key_len: 11
ref: ccbuser.pm.pay_method_id
rows: 2
filtered: 100.00
Extra: Using index
*************************** 4. row ***************************
id: 1
select_type: SIMPLE
table: aoi
partitions: NULL
type: ref
possible_keys: idx_accttorderitem_orderid,idx_ord_prod_id
key: idx_accttorderitem_orderid
key_len: 10
ref: ccbuser.ao.order_id
rows: 1
filtered: 100.00
Extra: NULL
*************************** 5. row ***************************
id: 1
select_type: SIMPLE
table: op
partitions: NULL
type: eq_ref
possible_keys: PRIMARY,idx_ord_prod_servid,idx_ord_prod_statprod,idx_ordprod_type,idx_ord_prod_ve_date,idx_ord_prod_acct_status_id,idx_combo,idx_is_renewable,idx_validity_package_ind_acct_status
key: PRIMARY
key_len: 10
ref: ccbuser.aoi.ord_prod_id
rows: 1
filtered: 5.00
Extra: Using where
*************************** 6. row ***************************
id: 1
select_type: SIMPLE
table: s
partitions: NULL
type: eq_ref
possible_keys: PRIMARY,idx_service_acctid
key: PRIMARY
key_len: 10
ref: ccbuser.op.serv_id
rows: 1
filtered: 100.00
Extra: NULL
*************************** 7. row ***************************
id: 1
select_type: SIMPLE
table: a
partitions: NULL
type: eq_ref
possible_keys: PRIMARY,idx_account_buidasid,idx_combo,idx_bu_id,idx_1
key: PRIMARY
key_len: 10
ref: ccbuser.s.acct_id
rows: 1
filtered: 5.00
Extra: Using where
7 rows in set, 11 warnings (0.03 sec)
i have given show warnings;
*************************** 1. row ***************************
Level: Warning
Code: 1292
Message: Incorrect datetime value: '2022-09-18 11:24:08 Etc/GMT' for column 'validity_end_date' at row 1
*************************** 2. row ***************************
Level: Warning
Code: 1292
Message: Incorrect datetime value: '2022-09-18 00:00:00 Etc/GMT' for column 'validity_end_date' at row 1
*************************** 3. row ***************************
Level: Warning
Code: 1292
Message: Incorrect datetime value: '2022-09-18 11:24:08 Etc/GMT' for column 'validity_end_date' at row 1
*************************** 4. row ***************************
Level: Warning
Code: 1292
Message: Incorrect datetime value: '2022-09-18 11:24:08 Etc/GMT' for column 'validity_end_date' at row 1
*************************** 5. row ***************************
Level: Warning
Code: 1292
Message: Incorrect datetime value: '2022-09-18 11:24:08 Etc/GMT' for column 'validity_end_date' at row 1
*************************** 6. row ***************************
Level: Warning
Code: 1292
Message: Incorrect datetime value: '2022-09-18 11:24:08 Etc/GMT' for column 'validity_end_date' at row 1
*************************** 7. row ***************************
Level: Warning
Code: 1292
Message: Incorrect datetime value: '2022-09-18 00:00:00 Etc/GMT' for column 'validity_end_date' at row 1
*************************** 8. row ***************************
Level: Warning
Code: 1292
Message: Incorrect datetime value: '2022-09-18 00:00:00 Etc/GMT' for column 'validity_end_date' at row 1
*************************** 9. row ***************************
Level: Warning
Code: 1292
Message: Incorrect datetime value: '2022-09-18 00:00:00 Etc/GMT' for column 'validity_end_date' at row 1
*************************** 10. row ***************************
Level: Warning
Code: 1292
Message: Incorrect datetime value: '2022-09-18 00:00:00 Etc/GMT' for column 'validity_end_date' at row 1
*************************** 11. row ***************************
Level: Note
Code: 1003
Message: /* select#1 */ select
.`op`.`ord_prod_id` AS `ord_prod_id`
from
`ordered_product` `op`
join `payment_type` `pt`
join `account` `a`
join `service` `s`
join `payment_method` `pm`
join `acct_order` `ao`
join `acct_order_item` `aoi`
where
(
(
`op`.`ord_prod_id` = `aoi`.`ord_prod_id`
)
and (
`aoi`.`order_id` = `ao`.`order_id`
)
and (
`ao`.`pay_meth_id` = `pm`.`pay_method_id`
)
and (
`s`.`serv_id` = `op`.`serv_id`
)
and (
`a`.`acct_id` = `s`.`acct_id`
)
and (
`pm`.`type_id` = `pt`.`id`
)
and (
`op`.`is_Renewable` = 'T'
)
and (
`pt`.`description` = 'Credit Card'
)
and (
(`op`.`type` = 1)
or (`op`.`type` = 2)
)
and (
`op`.`validity_end_date` < '2022-09-18 11:24:08 Etc/GMT'
)
and (
`op`.`validity_end_date` >= '2022-09-18 00:00:00 Etc/GMT'
)
and (
`op`.`acct_status_id` = 1
)
and (`a`.`bu_id` = 103)
)
order by
`op`.`validity_end_date`
All the rows scan one row, some of them scan 3k for one row – do I have to use str_to_date functions for the above one, are there any ways to improve performance?
Table structure:
Table: ordered_product
Create Table: CREATE TABLE `ordered_product` (
`acct_status_id` decimal(22,0) NOT NULL,
`anual_prepay_ind` varchar(1) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`bill_end_date` datetime DEFAULT NULL,
`bill_start_date` datetime DEFAULT NULL,
`equip_id` decimal(22,0) DEFAULT NULL,
`ord_prod_id` decimal(22,0) NOT NULL,
`package_id` decimal(22,0) DEFAULT NULL,
`package_ind` varchar(1) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`parent_ord_prod_id` decimal(22,0) DEFAULT NULL,
`prod_id` decimal(22,0) DEFAULT NULL,
`quantity` decimal(38,0) DEFAULT NULL,
`remove_flag` varchar(1) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`serv_id` decimal(22,0) NOT NULL,
`srv_end_date` datetime DEFAULT NULL,
`srv_start_date` datetime DEFAULT NULL,
`split_prod_id` decimal(22,0) DEFAULT NULL,
`term` decimal(22,0) DEFAULT NULL,
`type` decimal(22,0) DEFAULT NULL,
`tax_charged` decimal(20,6) DEFAULT NULL,
`comments` varchar(4000) DEFAULT NULL,
`reason_code_id` decimal(20,0) DEFAULT NULL,
`price_charged` decimal(20,2) DEFAULT NULL,
`validity_period` varchar(20) DEFAULT NULL,
`validity_duration` decimal(38,0) DEFAULT NULL,
`validity_end_date` datetime DEFAULT NULL,
`coupon_amount` decimal(20,2) DEFAULT NULL,
`coupon_code` varchar(100) DEFAULT NULL,
`applied_wallet_amount` decimal(20,2) DEFAULT NULL,
`applied_rate_type` varchar(100) DEFAULT NULL,
`partner_domain` varchar(100) DEFAULT NULL,
`is_Renewable` varchar(1) DEFAULT NULL,
`coupon_external_id` varchar(256) DEFAULT NULL,
`validity_extended_date` datetime DEFAULT NULL,
`cancellation_date` datetime DEFAULT NULL,
`rec_indicator` varchar(1) DEFAULT NULL,
`suspend_start_date` datetime DEFAULT NULL,
`suspend_end_date` datetime DEFAULT NULL,
`suspend_duration` decimal(20,0) DEFAULT NULL,
`commitment_end_date` datetime DEFAULT NULL,
`modified_ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`contact_id` varchar(30) DEFAULT NULL,
`subscription_status_id` decimal(22,0) DEFAULT NULL,
`bu_charged_currency_id` decimal(38,0) DEFAULT NULL,
`currency_code` varchar(200) DEFAULT NULL,
`legacy_id` varchar(200) DEFAULT NULL,
`app_service_id` varchar(200) DEFAULT NULL,
`app_channel_name` varchar(200) DEFAULT NULL,
`applied_prod_rate_id` decimal(22,0) DEFAULT NULL,
`applied_prod_rate_in_charged_currency_id` decimal(22,0) DEFAULT NULL,
`applied_prod_price` decimal(22,0) DEFAULT NULL,
`bill_to_parent` varchar(1) DEFAULT NULL,
PRIMARY KEY (`ord_prod_id`),
KEY `idx_ord_prod_servid` (`serv_id`),
KEY `idx_ord_prod_statprod` (`acct_status_id`,`prod_id`,`package_id`),
KEY `idx_ord_prod_bs_date` (`bill_start_date`),
KEY `idx_ord_prod_be_date` (`bill_end_date`),
KEY `ordered_product_modified_ts` (`modified_ts`),
KEY `idx_ordprod_type` (`type`),
KEY `idx_ord_prod_ve_date` (`validity_end_date`),
KEY `idx_ord_prod_prod_id` (`prod_id`),
KEY `idx_ord_prod_srv_start_date` (`srv_start_date`),
KEY `idx_ord_prod_pack_id` (`package_id`),
KEY `idx_ord_prod_acct_status_id` (`acct_status_id`),
KEY `idx_ord_prod_validity_extend_dt` (`validity_extended_date`),
KEY `idx_remove_flag` (`remove_flag`),
KEY `idx_ord_prod_srv_end_date` (`srv_end_date`),
KEY `idx_subscription_status_id` (`subscription_status_id`),
KEY `idx_coupon_code` (`coupon_code`),
KEY `idx_parent_ord_prod_id` (`parent_ord_prod_id`),
KEY `idx_combo` (`type`,`serv_id`),
KEY `idx_is_renewable` (`is_Renewable`),
KEY `idx_package_ind` (`package_ind`),
KEY `idx_validity_package_ind_acct_status` (`validity_end_date`,`package_ind`,`acct_status_id`),
KEY `idx_legacyid` (`legacy_id`),
KEY `idx_cancellation_date` (`cancellation_date`),
KEY `idx_suspend_start_date` (`suspend_start_date`),
KEY `idx_suspend_end_date_validity_end_date_combo` (`suspend_end_date`,`validity_end_date`,`acct_status_id`,`is_Renewable`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Table: payment_type
Create Table: CREATE TABLE `payment_type` (
`auto_pay_capable_ind` varchar(1) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`can_post_credit_ind` varchar(1) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`check_number_ind` varchar(1) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`description` varchar(30) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`display_order` decimal(22,0) NOT NULL,
`id` decimal(22,0) NOT NULL,
`requires_gateway_ind` varchar(1) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`display_name` varchar(30) DEFAULT NULL,
`modified_ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`image_url` varchar(4096) DEFAULT NULL,
`short_code` varchar(20) DEFAULT NULL,
`payment_group` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_pmttype_descrip` (`description`),
KEY `idx_display_name` (`display_name`),
KEY `idx_description` (`description`),
KEY `idx_payment_group` (`payment_group`),
KEY `idx_modified_ts` (`modified_ts`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Table: account
Create Table: CREATE TABLE `account` (
`acct_id` decimal(22,0) NOT NULL,
`acct_status_id` decimal(22,0) NOT NULL,
`acct_type_id` decimal(22,0) DEFAULT NULL,
`attach_bill_cycle` char(1) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`bb_acct_id` varchar(256) DEFAULT NULL,
`bill_del_type_id` decimal(22,0) DEFAULT NULL,
`acct_bill_mode` varchar(20) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`bu_id` decimal(22,0) NOT NULL,
`acct_comment` varchar(500) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`compliment_acct` varchar(1) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`contact_id` decimal(22,0) NOT NULL,
`corporate_id` decimal(22,0) DEFAULT NULL,
`create_date` datetime NOT NULL,
`customer_id` varchar(100) DEFAULT NULL,
`direct_acct` varchar(1) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`do_not_auto_script` char(5) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`email_inv_format` varchar(25) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`external_id_prefix` varchar(6) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`external_id_suffix` varchar(25) DEFAULT NULL,
`inter_pic_id` varchar(4) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`intra_pic_id` varchar(4) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`legacy_id` decimal(22,0) DEFAULT NULL,
`parent_id` decimal(22,0) DEFAULT NULL,
`partner_id` decimal(22,0) DEFAULT NULL,
`psa_acct_id` varchar(20) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`acct_reg_num` varchar(25) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`sales_method` varchar(100) DEFAULT NULL,
`shipping_add_id` decimal(22,0) DEFAULT NULL,
`tax_exempt` varchar(1) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`tax_number` varchar(20) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`tv_dma_id` varchar(30) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`status_change_date` datetime DEFAULT NULL,
`external_creation_date` date DEFAULT NULL,
`sales_person` varchar(200) DEFAULT NULL,
`offer_type` varchar(50) DEFAULT NULL,
`cancel_reasons_id` int(38) DEFAULT NULL,
`acct_addl_info_id` decimal(38,0) DEFAULT NULL,
`vpn_id` decimal(22,0) DEFAULT NULL,
`verified` varchar(1) DEFAULT NULL,
`verified_channel` varchar(50) DEFAULT NULL,
`active_logins_count` decimal(20,0) DEFAULT NULL,
`acct_role_id` decimal(20,0) DEFAULT NULL,
`mso_id` varchar(200) DEFAULT NULL,
`mso_name` varchar(200) DEFAULT NULL,
`anonymized` varchar(1) DEFAULT NULL,
`parental_control` varchar(1) DEFAULT NULL,
`act_state_id` decimal(38,0) DEFAULT NULL,
`verified_date` datetime DEFAULT NULL,
`complaintmode_acct` varchar(1) DEFAULT NULL,
`modified_ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`mobile_verified` varchar(1) DEFAULT NULL,
`acct_sub_type_id` decimal(22,0) DEFAULT NULL,
`created_by` decimal(22,0) DEFAULT NULL,
`ip_address` varchar(50) DEFAULT NULL,
PRIMARY KEY (`acct_id`),
KEY `idx_account_customer_id` (`customer_id`),
KEY `idx_account_buidasid` (`bu_id`,`acct_status_id`),
KEY `idx_account_bbaccountid` (`bb_acct_id`),
KEY `idx_create_date` (`create_date`),
KEY `idx_contact_id` (`contact_id`),
KEY `idx_attach_bill_cycle` (`attach_bill_cycle`),
KEY `idx_act_state` (`act_state_id`),
KEY `idx_accountt_legacyid` (`legacy_id`),
KEY `account_modified_ts` (`modified_ts`),
KEY `idx_account_acctroleid` (`acct_role_id`),
KEY `idx_extrnl_suffix` (`external_id_suffix`),
KEY `idx_extrnl_prefix` (`external_id_prefix`),
KEY `idx_combo` (`bu_id`,`psa_acct_id`),
KEY `idx_bu_id` (`bu_id`),
KEY `idx_acct_reg_num` (`acct_reg_num`),
KEY `idx_acct_stat_id` (`acct_status_id`),
KEY `account_idx_combo4` (`tax_number`,`acct_id`,`contact_id`,`bu_id`),
KEY `idx_1` (`bu_id`,`customer_id`),
KEY `idx_acct_type_id` (`acct_type_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Table: service
Create Table: CREATE TABLE `service` (
`acct_id` decimal(22,0) NOT NULL,
`acct_status_id` decimal(22,0) DEFAULT NULL,
`do_not_auto_script` char(5) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`end_date` datetime DEFAULT NULL,
`last_billed` datetime DEFAULT NULL,
`loc_id` decimal(22,0) DEFAULT NULL,
`serv_id` decimal(22,0) NOT NULL,
`start_date` datetime NOT NULL,
`type` decimal(22,0) DEFAULT NULL,
`suspend_start_date` date DEFAULT NULL,
`suspend_end_date` date DEFAULT NULL,
`pending_suspension_date` date DEFAULT NULL,
`reactivation_date` date DEFAULT NULL,
`suspend_duration` decimal(20,0) DEFAULT NULL,
`modified_ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`serv_id`),
KEY `idx_service_acctid` (`acct_id`),
KEY `idx_service_locid` (`loc_id`),
KEY `service_modified_ts` (`modified_ts`),
KEY `idx_service_modified_ts` (`modified_ts`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Table: payment_method
Create Table: CREATE TABLE `payment_method` (
`account_number` varchar(200) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`bob_id` decimal(22,0) DEFAULT NULL,
`closed_date` datetime DEFAULT NULL,
`pay_method_id` decimal(22,0) NOT NULL,
`start_date` datetime NOT NULL,
`type_id` decimal(22,0) NOT NULL,
`credit_card_type_id` decimal(22,0) DEFAULT NULL,
`expiration_date` datetime DEFAULT NULL,
`name` varchar(100) DEFAULT NULL,
`pay_meth_type_id` decimal(22,0) NOT NULL,
`security_code` varchar(100) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`str_addr` varchar(250) DEFAULT NULL,
`zip_code` varchar(10) DEFAULT NULL,
`acct_type_id` decimal(22,0) DEFAULT NULL,
`bank_name` varchar(512) DEFAULT NULL,
`bank_phone` varchar(15) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`rtn` varchar(20) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`city` varchar(100) DEFAULT NULL,
`drivers_license` varchar(20) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`email` varchar(256) DEFAULT NULL,
`sent_out` varchar(1) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`ssn` varchar(30) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`state` varchar(4) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`country` varchar(30) DEFAULT NULL,
`storage_token` varchar(200) DEFAULT NULL,
`payer_id` varchar(50) DEFAULT NULL,
`last_digits` varchar(4) DEFAULT NULL,
`ref_number` varchar(50) DEFAULT NULL,
`phone_number` varchar(20) DEFAULT NULL,
`dc_code` varchar(20) DEFAULT NULL,
`xid` varchar(250) DEFAULT NULL,
`eci` varchar(5) DEFAULT NULL,
`cavv` varchar(250) DEFAULT NULL,
`ucaf_authentication_data` varchar(250) DEFAULT NULL,
`ucaf_collection_ind` varchar(5) DEFAULT NULL,
`subscription_id` varchar(50) DEFAULT NULL,
`effort_id` decimal(10,0) DEFAULT NULL,
`receipt_data` longtext,
`transaction_id` varchar(512) DEFAULT NULL,
`org_transaction_id` varchar(512) DEFAULT NULL,
`tax_area_id` varchar(30) DEFAULT NULL,
`modified_ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`nick_name` varchar(100) DEFAULT NULL,
`iin` varchar(8) DEFAULT NULL,
`allow_unlimited` tinyint(1) DEFAULT NULL,
`name_of_bank` varchar(100) DEFAULT NULL,
`card_number` varchar(100) DEFAULT NULL,
`pin` varchar(20) DEFAULT NULL,
`card_finger_print` varchar(200) DEFAULT NULL,
`card_issuer_country` varchar(30) DEFAULT NULL,
`card_service_provider` varchar(512) DEFAULT NULL,
PRIMARY KEY (`pay_method_id`),
KEY `payment_method_modified_ts` (`modified_ts`),
KEY `idx_pmtmethod_transid` (`transaction_id`),
KEY `idx_payment_method_start_dt` (`start_date`),
KEY `payment_method_start_date` (`start_date`),
KEY `payment_method_bob_id` (`bob_id`),
KEY `payment_method_type_id` (`type_id`),
KEY `idx_pm_accountno` (`account_number`),
KEY `idx_exp_date` (`expiration_date`),
KEY `idx_org_transaction_id` (`org_transaction_id`),
KEY `idx_transaction_id` (`transaction_id`),
KEY `Idx_bob_id` (`bob_id`),
KEY `idx_account_number` (`account_number`),
KEY `Idx_type_id` (`type_id`),
KEY `i_modified_ts` (`modified_ts`),
KEY `idx_last_digits` (`last_digits`),
KEY `idx_ref_number` (`ref_number`),
KEY `ix_refer_num` (`ref_number`),
KEY `idx_zipcode` (`zip_code`),
KEY `idx_card_fingerprint` (`card_finger_print`),
KEY `idx_phone_number` (`phone_number`),
KEY `idx_type_id_zip_code_last_digits` (`type_id`,`zip_code`,`last_digits`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Table: acct_order
Create Table: CREATE TABLE `acct_order` (
`acct_id` decimal(22,0) NOT NULL,
`ao_wf_instance_id` decimal(22,0) DEFAULT NULL,
`comm` varchar(4000) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`comment_id` decimal(38,0) DEFAULT NULL,
`external_status` varchar(50) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`house_hold_user` varchar(60) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`legacy_id` varchar(200) DEFAULT NULL,
`modify_date` datetime NOT NULL,
`order_id` decimal(22,0) NOT NULL,
`promise_date` datetime NOT NULL,
`remove_flag` varchar(1) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`serv_id` decimal(22,0) DEFAULT NULL,
`txn_id` decimal(22,0) DEFAULT NULL,
`workflow_instance_id` decimal(22,0) DEFAULT NULL,
`external_order_id` varchar(200) DEFAULT NULL,
`ref_number` varchar(200) DEFAULT NULL,
`pmt_profile_id` varchar(2048) DEFAULT NULL,
`pay_meth_id` decimal(22,0) DEFAULT NULL,
`modified_ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`txn_summary_id` int(38) DEFAULT NULL,
`country` varchar(10) DEFAULT NULL,
`recon_required` varchar(50) DEFAULT NULL,
PRIMARY KEY (`order_id`),
KEY `idx_acctorder_acctid` (`acct_id`),
KEY `idx_acctorder_wfiid` (`workflow_instance_id`),
KEY `idx_acctorder_servid` (`serv_id`),
KEY `idx_ao_mod_dt` (`modify_date`),
KEY `idx_ext_id` (`external_order_id`),
KEY `acct_order_modified_ts` (`modified_ts`),
KEY `idx_pmt_profile_id` (`pmt_profile_id`),
KEY `idx_ref_number` (`ref_number`),
KEY `idx_pay_meth_id` (`pay_meth_id`),
KEY `idx_txn_id` (`txn_id`),
KEY `idx_promise_date` (`promise_date`),
KEY `idx_modified_ts` (`modified_ts`),
KEY `idx_ao_wf_instance_id` (`ao_wf_instance_id`),
KEY `idx_acct_id_legacy_id` (`acct_id`,`legacy_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Table: acct_order_item
Create Table: CREATE TABLE `acct_order_item` (
`modify_date` datetime NOT NULL,
`ord_prod_id` decimal(22,0) NOT NULL,
`order_id` decimal(22,0) NOT NULL,
`order_item_id` decimal(22,0) NOT NULL,
`modified_ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`order_item_id`),
KEY `idx_accttorderitem_orderid` (`order_id`),
KEY `idx_ord_prod_id` (`ord_prod_id`),
KEY `acct_order_item_modified_ts` (`modified_ts`),
KEY `idx_acct_order_item_modified_ts` (`modified_ts`),
KEY `idx_modified_ts` (`modified_ts`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
3
Answers
Re-arranging your query, you get this…
This looks wrong to me, but I can’t tell without the database schema.
Here’s why I think it’s wrong…
bu_id = 103
I strongly suspect that
acct_order
has anacct_id
column, which would likely enable something like this…That alone will likely reduce the number of rows being processed, and give insights into what indexes you want, potentially being…
You should also fix the date literal being used in the
WHERE
clause.Either way, if you want a more categorical response, you need to include the full schema for those tables, including indexes and foreign keys (to validate your joins) as well as row counts, cardinality, etc (to direct you on index creation, performance tuning, etc).
Edited to remove
description
per Rick James’s comment.An index designed match your query will make it faster. (But it won’t make it correct if it’s wrong, just sayin’.)
You filter your
ordered_product
table on:So try an index with all the equality match columns followed by the range column. MySql can random-access it to the first eligible column and then scan it sequentially. Fast.
To learn about this, see Marcus Winad’s excellent https://use-the-index-luke.com/ .
Pro tip Using mixed case in column or table names can cause confusion if/when you migrate to another server machine. Avoid!
There are several orders in which the Optimizer might evaluate the query. Here are some additional indexes that the optimizer might use, especially if it chooses to start with
op
.