MySQL慢速第一次查询密钥限制1
我有一个500mb的表,并对特定键执行查询。由于表的行数超过400k,第一次查询大约需要3秒,接下来的查询速度非常快,下降到0.001秒 我能用更好的表结构解决这个问题,而不增加数据库内存吗 表和键的设置如下所示:MySQL慢速第一次查询密钥限制1,mysql,phpmyadmin,myisam,Mysql,Phpmyadmin,Myisam,我有一个500mb的表,并对特定键执行查询。由于表的行数超过400k,第一次查询大约需要3秒,接下来的查询速度非常快,下降到0.001秒 我能用更好的表结构解决这个问题,而不增加数据库内存吗 表和键的设置如下所示: CREATE TABLE IF NOT EXISTS `mytable` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `isbn` varchar(13) NOT NULL, `dist_id` varcha
CREATE TABLE IF NOT EXISTS `mytable` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`isbn` varchar(13) NOT NULL,
`dist_id` varchar(20) NOT NULL,
`title` varchar(150) NOT NULL,
`title_under` varchar(250) NOT NULL,
`author` varchar(250) NOT NULL,
`pub` varchar(100) NOT NULL,
`pub_place` varchar(40) NOT NULL,
`date` varchar(4) NOT NULL,
`edition` varchar(40) NOT NULL,
`subject` varchar(240) NOT NULL,
`holdings` varchar(250) NOT NULL,
`image` varchar(150) NOT NULL,
`rating_g` float(5,2) NOT NULL,
`rating_r` int(11) NOT NULL,
`last_change` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `isbn` (`isbn`),
FULLTEXT KEY `title_title_under` (`title`,`title_under`),
FULLTEXT KEY `author` (`author`),
FULLTEXT KEY `isbn_title_title_under_author_date_edition_subject` (`isbn`,`title`,`title_under`,`author`,`date`,`edition`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=492755 ;
对上述问题的解释如下:
EXPLAIN SELECT *
FROM mytable
WHERE id =304243
LIMIT 1
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE mytable const PRIMARY PRIMARY 8 const 1
表的显示索引给出:
SHOW INDEX FROM mytable
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
mytable 0 PRIMARY 1 id A 492753 NULL NULL BTREE
mytable 0 isbn 1 isbn A 492753 NULL NULL BTREE
mytable 1 tit.. 1 title NULL 1 NULL NULL FULLTEXT
mytable 1 tit.. 2 title.. NULL 1 NULL NULL FULLTEXT
mytable 1 author 1 author NULL 1 NULL NULL FULLTEXT
mytable 1 isbn_.. 1 isbn NULL 1 NULL NULL FULLTEXT
mytable 1 isbn_.. 2 title NULL 1 NULL NULL FULLTEXT
mytable 1 isbn_.. 3 title.. NULL 1 NULL NULL FULLTEXT
mytable 1 isbn_.. 4 author NULL 1 NULL NULL FULLTEXT
mytable 1 isbn_.. 5 date NULL 1 NULL NULL FULLTEXT
mytable 1 isbn_.. 6 edition NULL 1 NULL NULL FULLTEXT
尝试在第一次查询之前手动预热缓存。签出。无论第一个查询是什么,它都会这样做吗?在我看来,这可能是某种类型的身份验证问题。我不确定这是可能的,但如果我站在你的立场上,我肯定会调查这件事。在id列中添加索引怎么样?is myisam,表是否经常更新?@Johnny Craig每个id第一次出现在所描述的查询中。例如,选择id=1(3秒)选择id=1(0.01秒)选择id=2(3秒)@reggie id是主要索引,还是我误解了你?