我有一张表(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
答案 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);