Mysql query is using some other index
allcaller_allcaller_logs starts with start_time but in your query start_time is checked by BETWEEN - thats range scan, not direct ref, so the query cannot simply use remaining columns (I suppose you use MySQL 5.5, in 5.6 there is Index Condition Pushdown Optimization which would be able to utilize that index better). Your index seems to "cover" your query on that table, so optimizer decision is still a bit weird, but there may be other reasons (bad cardinality/statistics) which together override it.

Generally if you make special index for your query, you need to organize all direct ref ("=") columns first, then either those with range (BETWEEN or &lt;,>...) or those used in order by if you have it.

As you have A.end_time != ... - such condition cannot be generally satisfied by index, so even if you need covering index, move such columns to the end of your index.

"which is not even matching the order of conditions in where clause" - this is misunderstanding of column order - WHERE clause evaluates all conditions as boolean expression and is free to reorder then any way it sees will be best, so order in columns in WHERE and order in index do not have to correspond in any way. For index it is better to order them by cardinality and actual usage.