エラーが発生するクエリがありました:
エラー1104:SELECTはMAX_JOIN_SIZEより多くの行を調べます。 WHEREを確認し、SELECTが正常な場合はSET SQL_BIG_SELECTS=1またはSETSQL_MAX_JOIN_SIZE=#を使用します。
クエリを変更しましたが、このエラーは発生しなくなりました。max_join_size = 900,000
およびsql_big_selects = 0
。残念ながら、sshアクセスがありません。phpmyadminを使用する必要があります。
だから私の質問は、特定のクエリが調べる行数を決定する方法はありますか?クエリがmax_join_sizeの制限にどれだけ近いかを確認したいと思います。
編集:これは元のクエリでした:
SELECT * FROM `tz_verify`
LEFT JOIN `tz_sessions` ON `tz_sessions`.`timesheet_id` = `tz_verify`.`timesheet_id`
AND `tz_sessions`.`client_id` = `tz_verify`.`client_id`
LEFT JOIN `tz_clients` ON `tz_sessions`.`client_id` = `tz_clients`.`id`
LEFT JOIN `tz_tutor_comments` ON `tz_sessions`.`timesheet_id` = `tz_tutor_comments`.`timesheet_id`
AND `tz_sessions`.`client_id` = `tz_tutor_comments`.`client_id`
LEFT JOIN `tz_notes` ON `tz_sessions`.`notes` = `tz_notes`.`id`
WHERE `tz_verify`.`code` = 'b65f35601c' AND `confirmed` = 0;
を一時的に実行できるようSQL_BIG_SELECTS
にすることができEXPLAIN
ます-出力は次のとおりです。
id select_type table type possible_keys key ref rows extra
1 SIMPLE tz_verify ALL NULL NULL NULL 93 Using where
1 SIMPLE tz_sessions ALL NULL NULL NULL 559
1 SIMPLE tz_clients eq_ref PRIMARY PRIMARY tz_sessions.client_id 1
1 SIMPLE tz_tutor_comments ALL NULL NULL NULL 185
1 SIMPLE tz_notes eq_ref PRIMARY PRIMARY tz_sessions.notes 1
クエリを書き直す際に、2つの別々のクエリを実行するために分割しました。最初に、からclient_id
(たとえば、226)とtimesheet_id
(たとえば、75)を検索しtz_verify
、次にこのクエリで次の値を使用しました。
SELECT * FROM `tz_sessions`
LEFT JOIN `tz_clients`
ON `tz_clients`.`id` = 226
LEFT JOIN `tz_tutor_comments`
ON `tz_tutor_comments`.`timesheet_id` = 75
AND `tz_tutor_comments`.`client_id` = 226
LEFT JOIN `tz_notes`
ON `tz_sessions`.`notes` = `tz_notes`.`id`
WHERE `tz_sessions`.`client_id` = 226 AND `tz_sessions`.`timesheet_id` = 75;
これがEXPLAIN
:
id select_type table type possible_keys key ref rows extra
1 SIMPLE tz_sessions ALL NULL NULL NULL 559 Using where
1 SIMPLE tz_clients const PRIMARY PRIMARY const 1
1 SIMPLE tz_tutor_comments ALL NULL NULL NULL 185
1 SIMPLE tz_notes eq_ref PRIMARY PRIMARY tz_sessions.notes 1
これは、一度に行うほどきれいではないようです。