索引列上的MySQL慢速排序BY

时间:2011-11-06 19:44:48

标签: mysql sql indexing sql-order-by

我有一张表(book_list),有大约400万条记录。它有一个PK(book_list_id),当我运行如下的查询时,我得到的结果是.060s

 select * from book_list bl ORDER BY bl.book_list_id LIMIT 25

现在,当我运行几乎相同的查询但按照var_(1200)的book_title进行排序并被索引时,需要34.7秒

 select * from book_list bl ORDER BY bl.book_title LIMIT 25

我能做些什么来使第二次发言更快?

BTW我也试过按其他数字索引字段排序,它们也很慢。只有PK排序似乎可以产生快速的结果。

这是创建表:

CREATE TABLE `book_list` (

`book_list_id` int(11) NOT NULL AUTO_INCREMENT,

`book_title` varchar(1200) CHARACTER SET utf8 DEFAULT NULL
 PRIMARY KEY (`book_list_id`),

 KEY `indx_book_title` (`book_title`(255))

 ) 
 ENGINE=InnoDB AUTO_INCREMENT=4733798 DEFAULT CHARSET=latin1

2 个答案:

答案 0 :(得分:1)

性能不佳是因为并非所有字段都被编入索引,只有第一个255个字符。 RDBS必须比较1200-255个字符才能生成最终订单。

增加被索引的字段部分或使查询仅按第一个255个字符排序,因为@Dmitry Beransky说:'左边的顺序(book_title,255)'

答案 1 :(得分:-2)

请你试试:

select * from book_list where book_list_id in
(select book_list_id from book_list order by book_title limit 25);