我正在COUNT(*)
使用MATCH() ... AGAINST()
. 我的具体查询如下:
SELECT COUNT(*) FROM `source_code` WHERE MATCH(`html`) AGAINST ('title');
几秒钟后我得到结果:
+----------+
| count(*) |
+----------+
| 17346 |
+----------+
1 row in set (16.30 sec)
多次运行查询后,查询始终需要大约 16 秒才能完成。
有什么方法可以加快这个查询?为什么查询缓存不缓存此查询的结果?
如果有帮助,这里是EXPLAIN
andCREATE TABLE
语句:
EXPLAIN SELECT COUNT(*) FROM `source_code` WHERE MATCH(`html_w`) AGAINST ('title');
+----+-------------+-------------+----------+---------------+--------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------+----------+---------------+--------+---------+------+------+-------------+
| 1 | SIMPLE | source_code | fulltext | html | html | 0 | | 1 | Using where |
+----+-------------+-------------+----------+---------------+--------+---------+------+------+-------------+
看起来正在使用索引。(也许开销是查询仍然是 0Using where
正常key_len
吗?)
SHOW CREATE TABLE `source_code`;
CREATE TABLE `source_code` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`url` varchar(255) NOT NULL,
`domain` varchar(255) DEFAULT NULL,
`title` varchar(255) DEFAULT NULL,
`html` longtext,
`crawled` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `url` (`url`),
KEY `crawled` (`crawled`),
KEY `domain` (`domain`),
FULLTEXT KEY `html` (`html`)
) ENGINE=MyISAM AUTO_INCREMENT=78707 DEFAULT CHARSET=latin1
声明中没有什么太疯狂的CREATE TABLE
地方。