Я не знаю, просто ли это желаемое, мое неправильное мышление или что-то еще:
select
f1,
f2,
f3
from f_import as a
left join e_im_com_codes on a.customer = e_im_com_codes.customer
and a.cc8 = e_im_com_codes.Code
where e_im_com_codes.Code is null
and a.customer = 'd'
and a.hide = false;
В результате получается план, который выглядит следующим образом:
+----+-------------+----------------+------------+------+--------------------------------------------+----------------+---------+-------+--------+----------+----------------------------------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+----------------+------------+------+--------------------------------------------+----------------+---------+-------+--------+----------+----------------------------------------------------+
| 1 | SIMPLE | f_import | NULL | ref | idx_cc8_import,idx_com_code | idx_cc8_import | 768 | const | 216782 | 10.00 | Using where |
| 1 | SIMPLE | e_im_com_codes | NULL | ALL | e_im_com_codes_idx,e_im_com_codes_customer | NULL | NULL | NULL | 1698 | 10.00 | Using where; Using join buffer (Block Nested Loop) |
+----+-------------+----------------+------------+------+--------------------------------------------+----------------+---------+-------+--------+----------+----------------------------------------------------+
Но занимает около минуты, чтобы бежать.
Кто-нибудь получил какие-либо предложения относительно оптимизации на основе запросов? Или мне нужно немного переделать базу данных?