2011-12-16 51 views
1

我有一個500mb的表,並執行對特定鍵的查詢。由於表達到了超過40萬行,第一個查詢約爲3秒,而下行速度非常快,下降到0.001秒。MySQL緩慢的第一次查詢密鑰限制1

我可以用更好的表格結構解決這個問題,而不需要增加數據庫內存嗎?

表和鍵設置如下:

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  
+0

無論第一個查詢是什麼,它都這樣做嗎?這聽起來可能是某種類型的認證問題。我不是那麼積極,但如果我在你的鞋子裏,它肯定是我會研究的。 – 2011-12-16 16:16:05

回答