Salve a tutti, mi scuso fin d'ora se l'argomento o la sezione non sono appropriati, ma avrei bisogno di un aiuto. Ho un database di libri con molte voci (circa 560'000). La struttura della tabella è la seguente:
Codice PHP:
CREATE TABLE IF NOT EXISTS `libri` (
  `
idint(10NOT NULL auto_increment,
  `
eanvarchar(13NOT NULL,
  `
tipo_prodottovarchar(2NOT NULL,
  `
autore1varchar(35NOT NULL,
  `
autore2varchar(35NOT NULL,
  `
autore3varchar(35NOT NULL,
  `
curatore1varchar(50NOT NULL,
  `
curatore2varchar(50NOT NULL,
  `
curatore3varchar(50NOT NULL,
  `
traduttore1varchar(25NOT NULL,
  `
traduttore2varchar(25NOT NULL,
  `
traduttore3varchar(25NOT NULL,
  `
illustratore1varchar(25NOT NULL,
  `
illustratore2varchar(25NOT NULL,
  `
titolo_compostovarchar(340NOT NULL,
  `
prefisso_titolovarchar(6NOT NULL,
  `
titolovarchar(165NOT NULL,
  `
numero_volumevarchar(7NOT NULL,
  `
titolo_partevarchar(155NOT NULL,
  `
data_edizioneint(4NOT NULL,
  `
numero_edizionevarchar(6NOT NULL,
  `
data_fuori_catalogoint(6NOT NULL,
  `
data_prevista_pubblint(6NOT NULL,
  `
codice_editoreint(6NOT NULL,
  `
editorevarchar(30NOT NULL,
  `
disponibilitavarchar(1NOT NULL,
  `
prezzoint(8NOT NULL,
  `
codice_collanavarchar(12NOT NULL,
  `
desc_collanavarchar(51NOT NULL,
  `
numerazione_collanavarchar(15NOT NULL,
  `
tascabilevarchar(1NOT NULL,
  `
formatovarchar(2NOT NULL,
  `
illustrazionivarchar(21NOT NULL,
  `
paginevarchar(15NOT NULL,
  `
numero_tot_volumiint(3NOT NULL,
  `
scolasticovarchar(1NOT NULL,
  `
cod_cat1_ccevarchar(10NOT NULL,
  `
cod_cat2_ccevarchar(10NOT NULL,
  `
cod_cat3_ccevarchar(10NOT NULL,
  `
cod_cat4_ccevarchar(10NOT NULL,
  `
desc_cat1_ccevarchar(80NOT NULL,
  `
desc_cat2_ccevarchar(80NOT NULL,
  `
desc_cat3_ccevarchar(80NOT NULL,
  `
desc_cat4_ccevarchar(80NOT NULL,
  `
cod_qual1_ccevarchar(10NOT NULL,
  `
cod_qual2_ccevarchar(10NOT NULL,
  `
cod_qual3_ccevarchar(10NOT NULL,
  `
cod_qual4_ccevarchar(10NOT NULL,
  `
desc_qual1_ccevarchar(80NOT NULL,
  `
desc_qual2_ccevarchar(80NOT NULL,
  `
desc_qual3_ccevarchar(80NOT NULL,
  `
desc_qual4_ccevarchar(80NOT NULL,
  `
codice_deweyint(3NOT NULL,
  `
desc_class_liv1varchar(42NOT NULL,
  `
desc_class_liv2varchar(42NOT NULL,
  `
cod_cat_mercevarchar(2NOT NULL,
  `
desc_cat_mercevarchar(20NOT NULL,
  `
cod_genere_lettvarchar(2NOT NULL,
  `
desc_genere_lettvarchar(20NOT NULL,
  `
classicovarchar(1NOT NULL,
  `
soggetto1varchar(30NOT NULL,
  `
soggetto2varchar(30NOT NULL,
  `
soggetto3varchar(30NOT NULL,
  `
abstracttext NOT NULL,
  
PRIMARY KEY  (`id`),
  
KEY `ean` (`ean`),
  
KEY `titolo` (`titolo`),
  
KEY `titolo_composto` (`titolo_composto`),
  
KEY `data_edizione` (`data_edizione`),
  
KEY `autore1` (`autore1`),
  
KEY `autore2` (`autore2`),
  
KEY `autore3` (`autore3`),
  
KEY `indice` (`autore1`,`autore2`,`autore3`,`titolo_composto`,`editore`,`ean`)
ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=546625 
La query che effettuo nelle ricerche è qualcosa del tipo:
Codice PHP:
SELECT FROM (`libri`) WHERE (autore1 LIKE '%mario%' OR autore2 LIKE '%mario%' OR autore3 LIKE '%mario%' OR titolo_composto LIKE '%mario%' OR ean LIKE '%mario%' OR editore LIKE '%mario%' OR 0) AND (autore1 LIKE '%rossi%' OR autore2 LIKE '%rossi%' OR autore3 LIKE '%rossi%' OR titolo_composto LIKE '%rossi%' OR ean LIKE '%rossi%' OR editore LIKE '%rossi%' OR 0) AND 1 ORDER BY `data_edizionedesc LIMIT 4 
Come vedete ho creato sia gli indici per i campi dove effettuo la ricerca sia un indice unico con i campi utilizzati, se però faccio l'explain della query ottengo:

id: 1
select_type: SIMPLE
table: libri
type: index
possible_keys: NULL
key: data_edizione
key_len: 4
ref: NULL
rows: 543749
Extra: Using where

quindi non viene usato nessun indice veramente utile alla ricerca, ma solo quello relativo all'ordinamento...

Avete qualche suggerimento da darmi per velocizzare le query?
Purtroppo sono vincolato alla struttura della tabella che è legata al catalogo nazionale

Grazie infinite per la pazienza.