MySQL慢速第一次查询密钥限制1

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

我有一个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` 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是主要索引,还是我误解了你?