我有一个大的MySQL表(约5M行),我经常插入数据。Mysql并发选择并插入数据库缓慢
这张表是一样的,我必须从中读取数据,有时整个数据库由于选择数据而缓慢,而有很多未决的插入。
我在WHERE语句中使用的每个字段都放了索引,所以我真的不知道select为什么会这么慢。
任何人都可以提供一个提示来解决这个问题吗?
这里是表和查询
CREATE TABLE `messages` (
`id` int(10) unsigned NOT NULL auto_increment,
`user_id` int(10) unsigned NOT NULL default '0',
`dest` varchar(20) character set latin1 default NULL,
`body` text character set latin1,
`sent_on` timestamp NOT NULL default CURRENT_TIMESTAMP,
`md5` varchar(32) character set latin1 NOT NULL default '',
`interface` enum('mobile','desktop') default NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `md5` (`md5`),
FULLTEXT KEY `dest` (`dest`,`body`),
FULLTEXT KEY `body` (`body`)
) ENGINE=MyISAM AUTO_INCREMENT=7074256 DEFAULT CHARSET=utf8
的SQL和这里查询:
EXPLAIN SELECT SQL_CALC_FOUND_ROWS id, sent_on, dest AS who, body,interface FROM messages WHERE user_id = 2 ORDER BY sent_on DESC LIMIT 0,50 \G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: messages
type: ref
possible_keys: user_id
key: user_id
key_len: 4
ref: const
rows: 13997
Extra: Using where; Using filesort
1 row in set (0.00 sec)
它可能是一个解决方案,我只需要添加一个索引(user_id,sent_on)? – n0cturnal 2010-11-21 16:03:32
尝试一下,看看它是否有帮助。 ; -P – tylerl 2010-11-22 01:21:57
fially我加了那个索引,你哪里没错! filesort消失了。非常感谢! – n0cturnal 2010-11-28 09:37:51