Kann MySQL FIND_IN_SET oder ein gleichwertiger Befehl zur Verwendung von Indizes verwendet werden?

Wenn ich vergleiche

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 |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+

mit diese

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 |
+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+

s ist offensichtlich, dassFIND_IN_SET doesnich Den Primärschlüssel ausnutzen.

Ich möchte eine Abfrage wie die oben genannte in eine gespeicherte Prozedur mit der durch Kommas getrennten Zeichenfolge als Argument einfügen.

Gibt es eine Möglichkeit, die Abfrage so zu gestalten, dass sie sich wie die zweite Version verhält, in der der Index verwendet wird, ohne jedoch den Inhalt des ID-Satzes zum Zeitpunkt des Schreibens der Abfrage zu kennen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage