2017-09-11 12 views
-1

我有大約500萬行以下結構的表:慢MySQL的選擇與其中PK> X

CREATE TABLE `books` (
    `asin` char(10) CHARACTER SET latin1 NOT NULL, 
    `title` varchar(512) NOT NULL, 
...other fields... 
    PRIMARY KEY (`asin`), 
    KEY `lang` (`lang`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

我想上的所有運行的腳本,爲了這個,我用「選擇*從asin> X限制10000的書籍中記住最後一個PK。

我預計這個查詢速度非常快,因爲我正在查詢PK,但是現在查詢花費了將近1分鐘(開始時效果更好),性能正在慢慢下降。爲什麼會發生?

解釋例如:

mysql> explain select * from books where asin > 'B000OT86OY' limit 10000; 
+----+-------------+-------+-------+---------------+---------+---------+------+---------+-------------+ 
| id | select_type | table | type | possible_keys | key  | key_len | ref | rows | Extra  | 
+----+-------------+-------+-------+---------------+---------+---------+------+---------+-------------+ 
| 1 | SIMPLE  | books | range | PRIMARY  | PRIMARY | 10  | NULL | 4670633 | Using where | 
+----+-------------+-------+-------+---------------+---------+---------+------+---------+-------------+ 
+0

返回多少行? – ad4s

+0

@ ad4s 10000每次 – Bob

+0

任何人都請解釋爲什麼這可能是downvoted? – Bob

回答

0

我能夠通過執行ALTER TABLE books ORDER BY asin ASC來減輕這個問題。我想象的問題是,我的光盤上的行在物理上相距很遠,所以在完成上述操作後,查詢變得瞬間完成。