MySQL медленно первый запрос на ограничение ключа 1 - PullRequest
1 голос
/ 16 декабря 2011

У меня есть таблица на 500 МБ, и я выполняю запросы к ней для определенного ключа.Поскольку таблица достигла более 400 тыс. Строк, первый запрос занимает около 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 голосов
/ 16 декабря 2011

Попробуйте прогреть кеш вручную перед первым запросом.Проверьте Как вручную создать кеш MySQL .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...