Ciao a tutti ho questa tabella che ha 27380 record

Codice PHP:
CREATE TABLE `dyn_carrello` (
  `
idint(10unsigned NOT NULL auto_increment,
  `
id_utenteint(5unsigned NOT NULL default '0',
  `
numerovarchar(50NOT NULL default '',
  `
sconto_pianificazionefloat(5,2unsigned NOT NULL default '0.00',
  `
sconto_ruolofloat(5,2unsigned NOT NULL default '0.00',
  `
sconto_qtafloat(5,2unsigned NOT NULL default '0.00',
  `
sconto_discrezionalefloat(5,2unsigned NOT NULL default '0.00',
  `
prezzofloat(8,2unsigned NOT NULL default '0.00',
  `
qtaint(10unsigned NOT NULL default '0',
  `
id_ordinevarchar(11NOT NULL default '',
  `
nota_rigavarchar(255) default NULL,
  
PRIMARY KEY  (`id`)
ENGINE=MyISAM AUTO_INCREMENT=256009 DEFAULT CHARSET=latin1 PACK_KEYS=0 AUTO_INCREMENT=256009 
precedentemente usavo php4 e mysql3 e il campo id_ordine era un INT e tutto filava liscio, poi per esigenze imposte da modifiche richieste, il campo id_ordine è diventato un VARCHAR, php5 e mysql4, eseguendo questa query

Codice PHP:
SELECT dyn_catalogo . * , dyn_carrello.qtadyn_carrello.nota_riga
FROM dyn_carrello
INNER JOIN dyn_catalogo ON dyn_carrello
.numero dyn_catalogo.numero
WHERE dyn_carrello
.id_utente '7'
AND dyn_carrello.id_ordine '0'
ORDER BY dyn_catalogo.codice 
che per altro restituisce un record la query diventa talmente lenta da restituire Fatal error: Maximum execution time of 30 seconds exceeded in... ho provato anche per curiosità a riportare il campo id_ordine a int, ma non cambia nulla, l'unica cosa che rende la query gestibile è la rimozione di ORDER BY che però a me serve, tengo a precisare che tutto gira in locale sul mio portatile, come detto sopra, la stessa query su php4 e mysql3 è una scheggia, a questo punto mi e vi chiedo, c'è qualcosa che non va nella mia installazione php-mysql oppure le caratteristiche dell'ambiente aggiornato php-mysql richiedono delle modifiche nella query?