"Подцепка" индекса в запросе с 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)
 

Gas

может по одной?
вообще-то логично что не "цепляется" в этом запросе, у тебя ж left join и условие на вторую таблицу
 

SergeyPechenyuk

Новичок
Автор оригинала: Gas
вообще-то логично что не "цепляется" в этом запросе, у тебя ж left join и условие на вторую таблицу
Подскажите пожалуйста как тогда правильно составить
 

Gas

может по одной?
кинь для начала show create table обоих таблиц.
но на вскидку тут можно заменить left join на простой join и добавить составной индекс (field2, field) в table2 (насколько он даст прироста по сравнению с одинарным на filed2 только экспериментально выясняется).

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