MySQL缓慢地首先查询键限制1

时间:2011-12-16 16:11:45

标签: 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` 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     

1 个答案:

答案 0 :(得分:0)

尝试在第一次查询之前手动预热缓存。查看How to manually build mysql cache