0

我正在使用 MySQL,并且我有一个数据库,我试图将其用作我将存储在不同索引中的数据的规范版本。这意味着我必须能够通过主键快速从中检索一组数据,但我还需要在输出时对其进行排序。我不知道如何让 MySQL 有效地做到这一点。

我的表如下所示:

CREATE TABLE demo.widgets (
    id INT AUTO_INCREMENT,
    -- lots more information I need
    awesomeness INT,
    PRIMARY KEY (id),
    INDEX IDX_AWESOMENESS (awesomeness),
    INDEX IDX_ID_AWESOMENESS (id, awesomeness)
);

我想做一些类似的事情:

SELECT *
FROM demo.widgets
WHERE id IN (
    1,
    2,
    3,
    5,
    8,
    13 -- you get the idea
)
ORDER BY awesomeness
LIMIT 50;

但不幸的是,我似乎无法从中获得良好的表现。它总是不得不求助于文件排序。有没有办法从这个设置中获得更好的性能,还是我需要考虑不同的数据库?

4

2 回答 2

0

为了获得优化的查询来获取和检索,您需要有一个按排序排序的键,然后是主键,如下所示:

create table if not exists test.fetch_sort (
    id int primary key,
    val int,
    key val_id (val, id)
);

insert into test.fetch_sort
values (1, 10), (2, 5), (3, 30);

explain
select *
from test.fetch_sort
where id in (1, 2, 3)
order by val;

这将给出一个仅使用索引进行搜索/排序的查询。

于 2013-11-07T22:33:35.477 回答
0

文档ORDER BY Optimization对此进行了解释。特别是,如果用于在WHERE子句中选择行的索引与在 中使用的不同ORDER BY,它将无法为 使用索引ORDER BY

于 2013-10-03T23:17:21.047 回答