Ragazzi ho un problema strano con mysql
ho un sito di articoli in diversi linguaggi... ho una struttura del genere: una tabella 'article', una 'category' (raccoglie le categorie di article) e una tabella 'article_linguaggio' per ogni linguaggio (es. article_en, article_it, article_es etc..)
la tabella article_en raccoglie gli articoli in inglese... article_it ad esempio raccoglie gli stessi articoli tradotti in italiano...
Ecco le tabelle:
article (PRIMARY KEY ART_id)
-----------------------------------------------
ART_id - ART_url - ART_date
category (PRIMARY KEY CAT_id)
-----------------------------------------------
CAT_id - CAT_url - CAT_title_en - CAT_title_de - CAT_title_es - CAT_title_it
ad esempio le tabelle 'article_en' e 'article_it' hanno questa struttura:
article_en (PRIMARY KEY ART_id)
-----------------------------------------------
ART_id - ART_title - ART_text
article_it (PRIMARY KEY ART_id)
-----------------------------------------------
ART_id - ART_title - ART_text
le tabelle di linguaggio (article_en, article_it, article_de etc) sono identiche come struttura. Hanno stesso collation, stesse chiavi primarie (ART_id), son tutte MyIsam etc...
Il problema è che se faccio questa query per ottenere gli ultimi 10 articoli inseriti in inglese ci impiega circa 2 secondi:
codice:
SELECT
`article_en`.`ART_title` AS ART_title,
SUBSTRING(`article_en`.`ART_text`,1,400) AS ART_summary,
`article`.`ART_date` AS ART_date,
`article`.`ART_url` AS ART_url,
`category`.`CAT_url` AS CAT_url,
`category`.`CAT_title_en` AS CAT_title
FROM `article_en`, `article`, `category`
WHERE `article_en`.`ART_id`=`article`.`ART_id` AND `article`.`CAT_id`=`category`.`CAT_id`
ORDER BY `article_en`.`ART_id` DESC
LIMIT 10
La stessa query per tutti gli altri linguaggi ci impiega molto meno (0.05 secondi circa). Ad esempio per gli ultimi 10 articoli italiani:
codice:
SELECT
`article_it`.`ART_title` AS ART_title,
SUBSTRING(`article_it`.`ART_text`,1,400) AS ART_summary,
`article`.`ART_date` AS ART_date,
`article`.`ART_url` AS ART_url,
`category`.`CAT_url` AS CAT_url,
`category`.`CAT_title_it` AS CAT_title
FROM `article_it`, `article`, `category`
WHERE `article_it`.`ART_id`=`article`.`ART_id` AND `article`.`CAT_id`=`category`.`CAT_id`
ORDER BY `article_it`.`ART_id` DESC
LIMIT 10
Come vedete le due query sono identiche non capisco questa differenza di tempo.. L'unica differenza tra le due tabelle è la dimensione. Avendo circa 60000 record una occupa circa 200 MB (inglese) l'altra circa 100 MB (italiano). Quella italiana occupa meno perchè ha diverse righe con 'ART_title' e 'ART_text' NULL in quanto molti articoli inglesi non sono ancora stati tradotti in italiano. Però tutte e due hanno 60000 record.
Quindi non penso che la differenza di circa 2 secondi sia imputabile alle diverse dimensioni. Qualcuno può dirmi da cosa dipende e come faccio a risolvere questo problema?
L'unica cosa che posso pensare è che ci sono problemi nella tabella 'article_en'. Ma se è così come faccio a individuarli e a correggerli? Ho provato a controllare, ottimizzare, riparare la tabella 'article_en' non ho migliorato per nulla i risultati.
grazie 1000