"Подцепка" индекса в запросе с JOIN

SergeyPechenyuk

Новичок
"Подцепка" индекса в запросе с JOIN

Здравствуйте.

Есть запрос "select c.id from TABLE c LEFT JOIN TABLE2 s on c.field=s.field where s.field2=1;", отрабатывает корректно, но оооооочень долго, т.к. не подцепляет индекс. Говорит, что подцепка индекса IDX_PARAM возможна, но на самом деле не подцепляет. Почему так? Помогите пожалуйста


mysql> explain select c.id from TABLE c LEFT JOIN TABLE2 s on c.field=s.field where s.field2=1;
+----+-------------+-------+------+--------------------------+----------------+---------+------------------------+----------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+--------------------------+----------------+---------+------------------------+----------+--------------------------+
| 1 | SIMPLE | c | ALL | IDX_PARAM | NULL | NULL | NULL | 25770871 | |
| 1 | SIMPLE | s | ref | IDX_STATE | IDX_STATE | 10 | base.c.field,const | 5 | Using where; Using index |
+----+-------------+-------+------+--------------------------+----------------+---------+------------------------+----------+--------------------------+
2 rows in set (0.00 sec)

mysql> show index from TABLE;
+---------------+------------+-----------------+--------------+-----------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+---------------+------------+-----------------+--------------+-----------------+-----------+-------------+----------+--------+------+------------+---------+
| TABLE | 0 | PRIMARY | 1 | id | A | 3 | NULL | NULL | | BTREE | |
| TABLE | 1 | IDX_PARAM | 1 | field | A | 3 | NULL | NULL | | BTREE | |
+---------------+------------+-----------------+--------------+-----------------+-----------+-------------+----------+--------+------+------------+---------+
2 rows in set (0.00 sec)
 
вообще-то логично что не "цепляется" в этом запросе, у тебя ж left join и условие на вторую таблицу
 
кинь для начала show create table обоих таблиц.
но на вскидку тут можно заменить left join на простой join и добавить составной индекс (field2, field) в table2 (насколько он даст прироста по сравнению с одинарным на filed2 только экспериментально выясняется).

мысли вслух, странная cardinality=3 у Table при количестве уникальных записей 25.7 млн.
 
Сверху