2014-05-19 3 views
0

J'ai la table com_news avec 32000 enregistrements.Mysql "Envoi de données" trop long

Le tableau com_news

CREATE TABLE IF NOT EXISTS `com_news` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`ts` int(11) NOT NULL, 
`title` varchar(255) NOT NULL, 
`text` longtext NOT NULL, 
`id_user` int(11) NOT NULL DEFAULT '0', 
`id_catalog` int(11) NOT NULL DEFAULT '0', 
`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '0-off,1-on', 
`window_title` varchar(255) DEFAULT NULL, 
`meta_keywords` varchar(255) DEFAULT NULL, 
`meta_description` text, 
`source` varchar(255) DEFAULT NULL, 
`img` int(11) NOT NULL DEFAULT '0', 
`to_twitter` tinyint(4) NOT NULL DEFAULT '0', 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=32719 ; 

La requête

SELECT COUNT(*) FROM `com_news` WHERE status=1 AND ts>=1398888007 

Profil

starting 0.000009 
checking query cache for query 0.000027 
Opening tables 0.000014 
System lock 0.000003 
Table lock 0.000016 
init 0.000015 
optimizing 0.000009 
statistics 0.000009 
preparing 0.000008 
executing 0.000004 
Sending data 0.517773 
end 0.000013 
query end 0.000003 
freeing items 0.000025 
storing result in query cache 0.000006 
logging slow query 0.000002 
cleaning up 0.000003 

Pourquoi les données d'envoi sont-elles trop longues?

Apache/2.2.15 (CentOS) 
MySQL: 5.1.73 
+1

Eh bien, un index sur (état, ts) [ou est-il (ts, statut); Je ne m'en souviendrai jamais] aiderait probablement. – Strawberry

Répondre

1

Il vous manque un index dans la table.

Voici ce que vous pouvez faire pour augmenter les performances

alter table com_news add index stat_ts_idx (status,ts); 

Maintenant, assurez-vous d'effectuer une sauvegarde de la table et les données avant d'appliquer l'indice.

Vous devriez toujours vérifier le plan d'explication de la requête qui vous en dira plus.

http://dev.mysql.com/doc/refman/5.0/en/explain.html

+0

Merci! La requête pour devenir plus rapide Envoyer des données \t 0.005353 –