Starting in the middle of last night (of course) I have a query that stops using an index and when that happens, it takes over an hour to complete vs. about 3 seconds when it uses the index. This query has been run for more than a year with no issues until last night.
What I have been able to figure out is that the query is using an index sometimes and not others; using explain. It has been slow for 2 hours, then fast for 1 hour and now slow again, etc.
When the query is running fast, explain tells me the query is using the key:
builder_row_id
When it is running slow, it has no key and the Extra has: Using join buffer (Block Nested Loop)
Here are the 2 rows from explain, sorry about the formatting:
id,select_type,table,partitions,type,possible_keys,key,key_len,ref,rows,filtered,Extra
1,SIMPLE,e8_,,ALL,builder_row_id,,,,1,100,Using where; Using join buffer (Block Nested Loop)
1,SIMPLE,e8_,,ref,builder_row_id,builder_row_id,6,"my_db_name.e6_.builder_block_id,const",4,100,
SELECT
e0_.id AS id_0,
e0_.name AS name_1,
e0_.content_id AS content_id_2,
e0_.from_label AS from_label_3,
e0_.support_address AS support_address_4,
e0_.actual_from_label AS actual_from_label_5,
e0_.actual_from_address AS actual_from_address_6,
e0_.enable_wysiwyg AS enable_wysiwyg_7,
e0_.enable_conversation AS enable_conversation_8,
e0_.folder_id AS folder_id_9,
e0_.enable_transactional AS enable_transactional_10,
e0_.type_id AS type_id_11,
e0_.utm_content AS utm_content_12,
e1_.builder_style_id AS builder_style_id_13,
e1_.id AS id_14,
e1_.builder_style_key AS builder_style_key_15,
e1_.builder_style_value AS builder_style_value_16,
e1_.builder_style_delete_status AS builder_style_delete_status_17,
e2_.content_id AS content_id_18,
e2_.content_text AS content_text_19,
e2_.content_html AS content_html_20,
e2_.content_subject AS content_subject_21,
e2_.content_preview_png AS content_preview_png_22,
e3_.builder_region_id AS builder_region_id_23,
e3_.id AS id_24,
e3_.builder_region_name AS builder_region_name_25,
e3_.builder_region_type_id AS builder_region_type_id_26,
e3_.builder_region_delete_status AS builder_region_delete_status_27,
e3_.builder_region_sort_order AS builder_region_sort_order_28,
e3_.builder_ui_id AS builder_ui_id_29,
e4_.builder_region_style_id AS builder_region_style_id_30,
e4_.builder_region_id AS builder_region_id_31,
e4_.builder_region_style_key AS builder_region_style_key_32,
e4_.builder_region_style_value AS builder_region_style_value_33,
e4_.builder_ui_id AS builder_ui_id_34,
e4_.builder_region_style_delete_status AS builder_region_style_delete_status_35,
e5_.builder_row_id AS builder_row_id_36,
e5_.builder_region_id AS builder_region_id_37,
e5_.builder_row_type_id AS builder_row_type_id_38,
e5_.builder_row_delete_status AS builder_row_delete_status_39,
e5_.builder_row_sort_order AS builder_row_sort_order_40,
e5_.builder_ui_id AS builder_ui_id_41,
e6_.builder_block_id AS builder_block_id_42,
e6_.builder_row_id AS builder_row_id_43,
e6_.builder_block_type_id AS builder_block_type_id_44,
e6_.builder_block_delete_status AS builder_block_delete_status_45,
e6_.builder_block_sort_order AS builder_block_sort_order_46,
e6_.builder_ui_id AS builder_ui_id_47,
e7_.builder_block_attribute_id AS builder_block_attribute_id_48,
e7_.builder_block_id AS builder_block_id_49,
e7_.builder_block_attribute_key AS builder_block_attribute_key_50,
e7_.builder_block_attribute_value AS builder_block_attribute_value_51,
e7_.builder_block_attribute_delete_status AS builder_block_attribute_delete_status_52,
e8_.builder_column_id AS builder_column_id_53,
e8_.builder_block_id AS builder_block_id_54,
e8_.parent_builder_column_id AS parent_builder_column_id_55,
e8_.builder_column_type_id AS builder_column_type_id_56,
e8_.builder_column_delete_status AS builder_column_delete_status_57,
e8_.builder_column_sort_order AS builder_column_sort_order_58,
e8_.builder_ui_id AS builder_ui_id_59,
e9_.builder_column_style_id AS builder_column_style_id_60,
e9_.builder_column_style_key AS builder_column_style_key_61,
e9_.builder_column_style_value AS builder_column_style_value_62,
e9_.builder_ui_id AS builder_ui_id_63,
e9_.builder_column_style_delete_status AS builder_column_style_delete_status_64,
e10_.builder_column_attribute_id AS builder_column_attribute_id_65,
e10_.builder_column_attribute_key AS builder_column_attribute_key_66,
e10_.builder_column_attribute_value AS builder_column_attribute_value_67,
e10_.builder_ui_id AS builder_ui_id_68,
e10_.builder_column_attribute_delete_status AS builder_column_attribute_delete_status_69,
e11_.builder_column_conf_id AS builder_column_conf_id_70,
e11_.builder_column_conf_key AS builder_column_conf_key_71,
e11_.builder_column_conf_value AS builder_column_conf_value_72,
e11_.builder_ui_id AS builder_ui_id_73,
e11_.builder_column_conf_delete_status AS builder_column_conf_delete_status_74,
e12_.builder_column_id AS builder_column_id_75,
e12_.builder_block_id AS builder_block_id_76,
e12_.parent_builder_column_id AS parent_builder_column_id_77,
e12_.builder_column_type_id AS builder_column_type_id_78,
e12_.builder_column_delete_status AS builder_column_delete_status_79,
e12_.builder_column_sort_order AS builder_column_sort_order_80,
e12_.builder_ui_id AS builder_ui_id_81,
e0_.content_id AS content_id_82,
e0_.product_id AS product_id_83,
e0_.unsubscribe_message_id AS unsubscribe_message_id_84,
e0_.unsubscribe_language_id AS unsubscribe_language_id_85,
e0_.rbac_role_id AS rbac_role_id_86,
e0_.folder_id AS folder_id_87,
e1_.id AS id_88,
e3_.id AS id_89,
e4_.builder_region_id AS builder_region_id_90,
e5_.builder_region_id AS builder_region_id_91,
e6_.builder_row_id AS builder_row_id_92,
e7_.builder_block_id AS builder_block_id_93,
e8_.builder_block_id AS builder_block_id_94,
e8_.parent_builder_column_id AS parent_builder_column_id_95,
e9_.builder_column_id AS builder_column_id_96,
e10_.builder_column_id AS builder_column_id_97,
e11_.builder_column_id AS builder_column_id_98,
e12_.builder_block_id AS builder_block_id_99,
e12_.parent_builder_column_id AS parent_builder_column_id_100
FROM
email e0_
LEFT JOIN builder_style e1_ ON e0_.id = e1_.id AND (e1_.builder_style_delete_status = 0)
LEFT JOIN content e2_ ON e0_.content_id = e2_.content_id
LEFT JOIN builder_region e3_ ON e0_.id = e3_.id AND (e3_.builder_region_delete_status = 0)
LEFT JOIN builder_region_style e4_ ON e3_.builder_region_id = e4_.builder_region_id AND (e4_.builder_region_style_delete_status = 0)
LEFT JOIN builder_row e5_ ON e3_.builder_region_id = e5_.builder_region_id AND (e5_.builder_row_delete_status = 0)
LEFT JOIN builder_block e6_ ON e5_.builder_row_id = e6_.builder_row_id AND (e6_.builder_block_delete_status = 0)
LEFT JOIN builder_block_attribute e7_ ON e6_.builder_block_id = e7_.builder_block_id AND (e7_.builder_block_attribute_delete_status = 0)
LEFT JOIN builder_column e8_ ON e6_.builder_block_id = e8_.builder_block_id AND (e8_.builder_column_delete_status = 0)
LEFT JOIN builder_column_style e9_ ON e8_.builder_column_id = e9_.builder_column_id AND (e9_.builder_column_style_delete_status = 0)
LEFT JOIN builder_column_attribute e10_ ON e8_.builder_column_id = e10_.builder_column_id AND (e10_.builder_column_attribute_delete_status = 0)
LEFT JOIN builder_column_conf e11_ ON e8_.builder_column_id = e11_.builder_column_id AND (e11_.builder_column_conf_delete_status = 0) AND (e11_.builder_column_conf_delete_status = 0)
LEFT JOIN builder_column e12_ ON e8_.builder_column_id = e12_.parent_builder_column_id AND (e12_.builder_column_delete_status = 0)
WHERE
e0_.delete_status = 0
AND
e0_.product_id = xxxxx
AND
e0_.id = xxxxx
ORDER BY
e3_.builder_region_sort_order ASC,
e5_.builder_row_sort_order ASC,
e6_.builder_block_sort_order ASC,
e8_.builder_column_sort_order ASC
Can someone point me in the right direction on what is going on here?
Here is the full explain:
id,select_type,table,partitions,type,possible_keys,key,key_len,ref,rows,filtered,Extra
1,SIMPLE,e0_,,const,PRIMARY,id,id_2,product_id,customer_id,delete_status,rbac_role_id,delete_status_2,PRIMARY,8,const,1,100,"Using temporary; Using filesort"
1,SIMPLE,e1_,,ref,id,id,5,const,const,3,100,Using where
1,SIMPLE,e2_,,const,PRIMARY,PRIMARY,8,const,1,100,
1,SIMPLE,e3_,,ref,delete,delete,5,const,const,4,100,Using where
1,SIMPLE,e4_,,ref,builder_region_id,builder_region_id,5,"my_db_name.e3_.builder_region_id,const',1,100,
1,SIMPLE,e5_,,ref,builder_block_id,builder_block_id,5,"my_db_name.e3_.builder_region_id,const",1,100,
1,SIMPLE,e6_,,ref,builder_region_id,builder_region_id,6,"my_db_name.e5_.builder_row_id,const",1,100,
1,SIMPLE,e7_,,ref,builder_block_id,builder_block_id,5,"my_db_name.e6_.builder_block_id,const",1,100,
1,SIMPLE,e8_,,ALL,builder_row_id,,,,8,100,Using where; Using join buffer (Block Nested Loop)
1,SIMPLE,e9_,,ref,builder_column_id,builder_column_id,5,"my_db_name.e8_.builder_column_id,const',5,100,
1,SIMPLE,e10_,,ref,builder_column_id,builder_column_id,5,"my_db_name.e8_.builder_column_id,const",2,100,
1,SIMPLE,e11_,,ref,builder_column_id,builder_column_id,5,"my_db_name.e8_.builder_column_id,const",1,100,
1,SIMPLE,e12_,,ALL,child_col,,,,8,100,Using where; Using join buffer (Block Nested Loop)
I just realized I posted the wrong create table:
CREATE TABLE builder_column
(
builder_column_id
int(11) unsigned NOT NULL AUTO_INCREMENT,
builder_block_id
int(11) unsigned DEFAULT NULL,
builder_column_type_id
tinyint(3) NOT NULL,
builder_column_delete_status
tinyint(1) unsigned NOT NULL,
builder_column_sort_order
tinyint(3) unsigned NOT NULL,
builder_column_create_date
timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
builder_column_modify_date
timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
builder_ui_id
varchar(200) DEFAULT '',
parent_builder_column_id
int(11) unsigned DEFAULT NULL,
builder_column_flags
tinyint(3) unsigned DEFAULT '0',
PRIMARY KEY (builder_column_id
),
KEY builder_row_id
(builder_block_id
,builder_column_delete_status
),
KEY child_col
(parent_builder_column_id
,builder_column_delete_status
)
) ENGINE=TokuDB AUTO_INCREMENT=901184 DEFAULT CHARSET=utf8 ROW_FORMAT=TOKUDB_SNAPPY;
UPDATE:
I have found that if I add:
FORCE INDEX FOR JOIN (email_builder_row_id)
and
FORCE INDEX FOR JOIN (child_col)
it will use the index and returns fast.
Asked by Jeff Ward
(11 rep)
Nov 3, 2017, 03:30 PM
Last activity: May 10, 2025, 03:05 AM
Last activity: May 10, 2025, 03:05 AM