Acabei de me deparar com algo estranho. O base_id é um varchar(255). Quando faço um SELECT sem aspas, ele varre toda a tabela:
mysql> EXPLAIN SELECT sid FROM rf_fo.scald_atoms WHERE base_id = 493457;
+----+-------------+-------------+-------+---------------+---------+---------+------+-------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------+-------+---------------+---------+---------+------+-------+--------------------------+
| 1 | SIMPLE | scald_atoms | index | base_id | base_id | 767 | NULL | 84404 | Using where; Using index |
+----+-------------+-------------+-------+---------------+---------+---------+------+-------+--------------------------+
1 row in set (0.00 sec)
Com uma citação, está ok.
mysql> EXPLAIN SELECT sid FROM rf_fo.scald_atoms WHERE base_id = '493457';
+----+-------------+-------------+-------+---------------+---------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------+-------+---------------+---------+---------+-------+------+-------------+
| 1 | SIMPLE | scald_atoms | const | base_id | base_id | 767 | const | 1 | Using index |
+----+-------------+-------------+-------+---------------+---------+---------+-------+------+-------------+
1 row in set (0.00 sec)
Isso faz todo o sentido.
Como você disse que base_id é VARCHAR(255), sua primeira consulta
realmente se comporta assim
Isso faz com que cada base_id experimente um CAST e uma comparação. Verificação completa da tabela necessária.
Sua segunda consulta é uma comparação de string pura e o índice tem valores baseados em string.