Thanks for the great suggestions.
I have converted 2 CHAR columns to VARCHAR and storage has gone from 34,905 to 29,679, so it's a wothwhile improvement.
EXPLAIN is below, although it seems to contain the same information as the CREATE TABLE command.
There are typically 1,000 to 20,000 rows for each client id. Max is 60,000. Total record count is 400,000.
I will try the INDEX change, but it will take me a little time.
Thanks heaps for the suggestions.
ield Type Null Key Default Extra
clientID int(11) NO PRI NULL
STATION_CALLSIGN varchar(15) NO NULL
CALLSIGN varchar(15) NO PRI NULL
QSO_DATE date NO PRI NULL
TIME_ON time NO PRI NULL
BAND enum('2190m','560m','160m','80m','60m','40m','30m'... NO PRI NULL
MODE enum('AM','AMTORFEC','ASCI','ATV','CHIP64','CHIP12... NO PRI NULL
DXCC smallint(6) NO NULL
RST_SENT char(4) YES NULL
GRIDSQUARE char(4) YES NULL
FLAGS set('QSL_RCVD','EQSL_QSL_RCVD','LOTW_QSL_RCVD','QS... YES NULL
Checker1 int(11) YES NULL
Checker2 int(11) YES NULL