MySQL 慢速第一次查询键限制 1

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

最佳答案

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

关于MySQL 慢速第一次查询键限制 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8536904/

相关文章:

mysql - 将表连接到自身的复杂 INNER JOIN

php - 为什么我会得到存在的列的未定义索引

mysql - 两个 Web 服务器之间的 phpMyAdmin 安装

mysql - 将单表拆分为多对多关系

mysql - 空间索引未用于多边形边界框搜索

MySQL 的更新级联未更新父 FK

mysql - 查询以计算表之间的多个总和

php - mysql 中未保留文本区域的换行符

mysql - 选择特定数据库进行 mysql gtid 复制

innodb - 使用 MyISAM 和 InnoDB 表备份 MySQL 数据库