O MySQL FIND_IN_SET ou equivalente pode ser criado para usar índices?
Se eu comparar
explain select * from Foo where find_in_set(id,'2,3');
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | User | ALL | NULL | NULL | NULL | NULL | 4 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
com este
explain select * from Foo where id in (2,3);
+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+
| 1 | SIMPLE | User | range | PRIMARY | PRIMARY | 8 | NULL | 2 | Using where |
+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+
É evidente queFIND_IN_SET
faznão explorar a chave primária.
Quero colocar uma consulta como a acima em um procedimento armazenado, com a seqüência separada por vírgula como argumento.
Existe alguma maneira de fazer com que a consulta se comporte como a segunda versão, na qual o índice é usado, mas sem conhecer o conteúdo do ID definido no momento em que a consulta é gravada?