このクエリがあり、読み込みに時間がかかりすぎています (約 40 秒)。
SELECT
`auxiliary_table_2`.`entry_id`,
`auxiliary_table_2`. `name`,
COUNT(`auxiliary_table_2`.`entry_id`) AS `auxiliary_table_2_count`
FROM (SELECT
`data_table`.*
FROM `data_table`
LEFT JOIN `exp_channels`
ON `exp_channels`.`channel_id` = `data_table`.`channel_id`
LEFT JOIN `exp_channel_titles`
ON `exp_channel_titles`.`entry_id` = `data_table`.`entry_id`
WHERE `exp_channels`.`channel_name` = 'main_table'
AND `exp_channel_titles`.`status` = 'open'
GROUP BY `data_table`.`entry_id`) AS `main_table`
JOIN `mapping_table` AS `mapping_table_1`
ON `mapping_table_1`.`rel_id` = `main_table`.`field_id_9`
JOIN (SELECT
`data_table`.`entry_id`,
`data_table`.`field_id_8` AS `name`
FROM `data_table`
LEFT JOIN `exp_channels`
ON `exp_channels`.`channel_id` = `data_table`.`channel_id`
WHERE `exp_channels`.`channel_name` = 'auxiliary_table_channel_name_1'
GROUP BY `data_table`.`entry_id`) AS `auxiliary_table_1`
ON `auxiliary_table_1`.`entry_id` = `mapping_table_1`.`rel_child_id`
JOIN `mapping_table` AS `mapping_table_2`
ON `mapping_table_2`.`rel_id` = `main_table`.`field_id_39`
JOIN (SELECT
`data_table`.`entry_id`,
`data_table`.`field_id_38` AS `name`
FROM `data_table`
LEFT JOIN `exp_channels`
ON `exp_channels`.`channel_id` = `data_table`.`channel_id`
WHERE `exp_channels`.`channel_name` = 'auxiliary_table_channel_name_2'
GROUP BY `data_table`.`entry_id`) AS `auxiliary_table_2`
ON `auxiliary_table_2`.`entry_id` = `mapping_table_2`.`rel_child_id`
JOIN `mapping_table` AS `mapping_table_3`
ON `mapping_table_3`.`rel_id` = `main_table`.`field_id_5`
JOIN (SELECT
`data_table`.`entry_id`,
`data_table`.`field_id_1` AS `name`
FROM `data_table`
LEFT JOIN `exp_channels`
ON `exp_channels`.`channel_id` = `data_table`.`channel_id`
WHERE `exp_channels`.`channel_name` = 'auxiliary_table_channel_name_3'
GROUP BY `data_table`.`entry_id`) AS `auxiliary_table_3`
ON `auxiliary_table_3`.`entry_id` = `mapping_table_3`.`rel_child_id`
JOIN `mapping_table` AS `mapping_table_4`
ON `mapping_table_4`.`rel_id` = `main_table`.`field_id_16`
JOIN (SELECT
`data_table`.`entry_id`,
`data_table`.`field_id_18` AS `name`
FROM `data_table`
LEFT JOIN `exp_channels`
ON `exp_channels`.`channel_id` = `data_table`.`channel_id`
WHERE `exp_channels`.`channel_name` = 'auxiliary_table_channel_name_4'
GROUP BY `data_table`.`entry_id`) AS `auxiliary_table_4`
ON `auxiliary_table_4`.`entry_id` = `mapping_table_4`.`rel_child_id`
JOIN `mapping_table` AS `mapping_table_5`
ON `mapping_table_5`.`rel_id` = `main_table`.`field_id_49`
JOIN (SELECT
`data_table`.`entry_id`,
`data_table`.`field_id_48` AS `name`
FROM `data_table`
LEFT JOIN `exp_channels`
ON `exp_channels`.`channel_id` = `data_table`.`channel_id`
WHERE `exp_channels`.`channel_name` = 'auxiliary_table_channel_name_5'
GROUP BY `data_table`.`entry_id`) AS `auxiliary_table_5`
ON `auxiliary_table_5`.`entry_id` = `mapping_table_5`.`rel_child_id`
GROUP BY `auxiliary_table_2`.`entry_id`
その要点はdata_table
、マッピングテーブルを介してマッピングされた補助テーブルに補助データがあることです。main_table
フィルタリングされたデータテーブルです。
動作が遅くなる原因となっている可能性があるものはここにありますか?
data_table
少量の行(約200以上)しかないため、これはクエリの問題であると想定しています。
EXPLAINの結果はこちら
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived4> ALL NULL NULL NULL NULL 3 Using temporary; Using filesort
1 PRIMARY <derived6> ALL NULL NULL NULL NULL 5 Using join buffer
1 PRIMARY <derived7> ALL NULL NULL NULL NULL 6 Using join buffer
1 PRIMARY <derived3> ALL NULL NULL NULL NULL 21 Using join buffer
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using join buffer
1 PRIMARY <derived5> ALL NULL NULL NULL NULL 143 Using join buffer
1 PRIMARY auxiliary_table_1 eq_ref PRIMARY,rel_child_id PRIMARY 4 main_table.field_id_9 1 Using where
1 PRIMARY auxiliary_table_2 eq_ref PRIMARY,rel_child_id PRIMARY 4 main_table.field_id_39 1 Using where
1 PRIMARY auxiliary_table_3 eq_ref PRIMARY,rel_child_id PRIMARY 4 main_table.field_id_5 1 Using where
1 PRIMARY auxiliary_table_4 eq_ref PRIMARY,rel_child_id PRIMARY 4 main_table.field_id_16 1 Using where
1 PRIMARY auxiliary_table_5 eq_ref PRIMARY,rel_child_id PRIMARY 4 main_table.field_id_49 1 Using where
7 DERIVED exp_channels ref PRIMARY,channel_name channel_name 122 1 Using where; Using temporary; Using filesort
7 DERIVED exp_channel_data ref channel_id channel_id 4 devthree_ee.exp_channels.channel_id 17
6 DERIVED exp_channels ref PRIMARY,channel_name channel_name 122 1 Using where; Using temporary; Using filesort
6 DERIVED exp_channel_data ref channel_id channel_id 4 devthree_ee.exp_channels.channel_id 17
5 DERIVED exp_channels ref PRIMARY,channel_name channel_name 122 1 Using where; Using temporary; Using filesort
5 DERIVED exp_channel_data ref channel_id channel_id 4 devthree_ee.exp_channels.channel_id 17
4 DERIVED exp_channels ref PRIMARY,channel_name channel_name 122 1 Using where; Using temporary; Using filesort
4 DERIVED exp_channel_data ref channel_id channel_id 4 devthree_ee.exp_channels.channel_id 17
3 DERIVED exp_channels ref PRIMARY,channel_name channel_name 122 1 Using where; Using temporary; Using filesort
3 DERIVED exp_channel_data ref channel_id channel_id 4 devthree_ee.exp_channels.channel_id 17
2 DERIVED exp_channels ref PRIMARY,channel_name channel_name 122 1 Using where; Using temporary; Using filesort
2 DERIVED exp_channel_data ref PRIMARY,channel_id channel_id 4 devthree_ee.exp_channels.channel_id 17
2 DERIVED exp_channel_titles eq_ref PRIMARY,status PRIMARY 4 devthree_ee.exp_channel_data.entry_id 1 Using where
MYSQL バージョン:
MySQL 5.1.66-cll を使用しています
表:
データ表
# Name Type Collation Attributes Null Default Extra
1 entry_id int(10) UNSIGNED No None
2 site_id int(4) UNSIGNED No 1
3 channel_id int(4) UNSIGNED No None
4 field_id_1 text utf8_general_ci Yes NULL
5 field_ft_1 tinytext utf8_general_ci Yes NULL
6 field_id_2 text utf8_general_ci Yes NULL
7 field_ft_2 tinytext utf8_general_ci Yes NULL
8 field_id_3 text utf8_general_ci Yes NULL
9 field_ft_3 tinytext utf8_general_ci Yes NULL
10 field_id_4 int(11) Yes 0
11 field_ft_4 tinytext utf8_general_ci Yes NULL
12 field_id_5 int(10) Yes 0
13 field_ft_5 tinytext utf8_general_ci Yes NULL
14 field_id_6 text utf8_general_ci Yes NULL
.....
マッピングテーブル
# Name Type Collation Attributes Null Default Extra
1 rel_id int(6) UNSIGNED No None AUTO_INCREMENT
2 rel_parent_id int(10) No 0
3 rel_child_id int(10) No 0
4 rel_type varchar(12) utf8_general_ci No None
5 rel_data mediumtext utf8_general_ci No None
6 reverse_rel_data mediumtext utf8_general_ci No None
PS 匿名の目的で、テーブル名を一般的な名前に置き換えました。