MySQL 5.7 performance issue with 300 GB Innodb
I think you have found an example of "over-normalization" and why it is bad to "normalize continuous values" such as dates.

I recommend you abandon date_tbl and pull a date into sales.  Also get rid of separate columns for year_no and month_no; instead compute them as needed.

Once you have done that, some of these may be useful:

INDEX(cal_date)
INDEX(brand, cal_date)
INDEX(zone, cal_date)


It depends on what ? are likely to be.  If, say, brand is frequently a single item, then (brand, cal_date) is likely to be the most useful.

Have you measured any improvement after OPTIMIZE TABLE?  I doubt it.