我有一個大的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