Собственно есть таблица, в ней есть поле accept_payment_moderator_id, на нем индекс. От эксплейна в шоке. В первом случае выдергивает все строки + создает временную таблицу, еще и file sort, во втором же случае - только 8-мь строк. Задача вытянуть все данные, но так, что бы индекс юзался (force index не вариант).
Причем если делать вложенный запрос, дергает также 4k заказов.
Код:
mysql> explain select * from `invoices` group by `accept_payment_moderator_id`;
+----+-------------+----------+------+---------------+------+---------+------+------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+------+---------+------+------+---------------------------------+
| 1 | SIMPLE | invoices | ALL | NULL | NULL | NULL | NULL | 4111 | Using temporary; Using filesort |
+----+-------------+----------+------+---------------+------+---------+------+------+---------------------------------+
1 row in set (0.00 sec)
mysql> explain select `accept_payment_moderator_id` from `invoices` group by `accept_payment_moderator_id`;
+----+-------------+----------+-------+---------------+-----------------------------+---------+------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+-------+---------------+-----------------------------+---------+------+------+--------------------------+
| 1 | SIMPLE | invoices | range | NULL | accept_payment_moderator_id | 5 | NULL | 8 | Using index for group-by |
+----+-------------+----------+-------+---------------+-----------------------------+---------+------+------+--------------------------+
1 row in set (0.00 sec)
Причем если делать вложенный запрос, дергает также 4k заказов.
Код:
explain select * from `app_moderators_user` where `id` in ( select `accept_payment_moderator_id` from `invoices` group by `accept_payment_moderator_id` );
+----+--------------------+---------------------+-------+---------------+-----------------------------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+---------------------+-------+---------------+-----------------------------+---------+------+------+-------------+
| 1 | PRIMARY | app_moderators_user | ALL | NULL | NULL | NULL | NULL | 27 | Using where |
| 2 | DEPENDENT SUBQUERY | invoices | index | NULL | accept_payment_moderator_id | 5 | NULL | 4111 | Using index |
+----+--------------------+---------------------+-------+---------------+-----------------------------+---------+------+------+-------------+
2 rows in set (0.00 sec)