GL's idea is a nice one but (at least in older versions of MySQL) it's not going to help much...
mysql> EXPLAIN
-> SELECT *
-> FROM mytable
-> WHERE (exchange_code, ticker) IN ( ('US','MOBI'), ('US','TESL'), ('UK','BP') );
+----+-------------+---------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | mytable | ALL | NULL | NULL | NULL | NULL | 147 | Using where |
+----+-------------+---------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)
mysql> EXPLAIN
-> SELECT *
-> FROM mytable
-> WHERE (exchange_code = 'US' AND ticker = 'MOBI')
-> OR (exchange_code = 'US' AND ticker = 'TESL')
-> OR (exchange_code = 'UK' AND ticker = 'BP')
-> ;
+----+-------------+---------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | mytable | ALL | exchange_code | NULL | NULL | NULL | 147 | Using where |
+----+-------------+---------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)
mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.6.21 |
+-----------+
The second query doesn't use the index because my data set is tiny. The first query doesn't even find the index.
If I increase the size of the data set (and the cardinality of exchange_code) slightly, the difference becomes more pronounced.
mysql> EXPLAIN
-> SELECT *
-> FROM mytable
-> WHERE (exchange_code = 'US' AND ticker = 'MOBI')
-> OR (exchange_code = 'US' AND ticker = 'TESL')
-> OR (exchange_code = 'UK' AND ticker = 'BP')
-> ;
+----+-------------+---------+-------+---------------+---------------+---------+------+------+-----------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+-------+---------------+---------------+---------+------+------+-----------------------+
| 1 | SIMPLE | mytable | range | exchange_code | exchange_code | 16 | NULL | 43 | Using index condition |
+----+-------------+---------+-------+---------------+---------------+---------+------+------+-----------------------+
1 row in set (0.00 sec)
mysql> EXPLAIN
-> SELECT *
-> FROM mytable
-> WHERE (exchange_code, ticker) IN ( ('US','MOBI'), ('US','TESL'), ('UK','BP') );
+----+-------------+---------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | mytable | ALL | NULL | NULL | NULL | NULL | 2352 | Using where |
+----+-------------+---------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)