if you use literals as you did in your problem statement - the optimizer realizes that column like 'literal without percent or underscore' is really equals and does that, consider:
ops$tkyte%ORA11GR2> create table t as select * from all_users;
Table created.
ops$tkyte%ORA11GR2>
ops$tkyte%ORA11GR2> set autotrace traceonly explain
ops$tkyte%ORA11GR2> select * from t where username = 'abc' or username like 'def';
Execution Plan
----------------------------------------------------------
Plan hash value: 1601196873
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 39 | 3 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T | 1 | 39 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("USERNAME"='abc' OR "USERNAME"='def')
see the username like 'def' was rewritten. However, if you have the CHANCE of having % or _ in there - via a bind variable for example:
ops$tkyte%ORA11GR2> variable x varchar2(20)
ops$tkyte%ORA11GR2> variable y varchar2(20)
ops$tkyte%ORA11GR2> set autotrace traceonly explain
ops$tkyte%ORA11GR2> select * from t where username = :x or username like :y;
Execution Plan
----------------------------------------------------------
Plan hash value: 1601196873
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 33 | 1287 | 3 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T | 33 | 1287 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("USERNAME" LIKE :Y OR "USERNAME"=:X)
then we have to assume you really need the extra processing that LIKE entails and we'll do the LIKE processing.
If you mean equals - use equals.
If you mean like - use like.
that should be the ONLY deciding factor. Which one do you NEED to use, which one did you MEAN to use, which one makes the most sense.