2014-05-19 3 views
0

У меня есть таблица com_news с 32000 записей.Mysql "Отправка данных" слишком долго

Таблица 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 ; 

Запрос

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

Профиль

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 

Почему передача данных слишком велика?

Apache/2.2.15 (CentOS) 
MySQL: 5.1.73 
+1

Ну, индекс по (состояние, ц) [или это (ц, статус); Я никогда не запомню], вероятно, поможет. – Strawberry

ответ

1

Вам не хватает указателя в таблице.

Так вот то, что вы можете сделать, чтобы увеличить производительность

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

Теперь убедитесь, что вы резервную копию таблицы и данных перед применением индекса.

Также вы всегда должны проверить план объяснения запроса, который вам многое скажет.

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

+0

Спасибо! Запрос станет быстрее Отправка данных \t 0.005353 –

Смежные вопросы