2013-10-03 141 views
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; 

但不幸的是,我似乎无法得到良好的表现出这。它总是需要使用文件夹。有没有办法从这个设置获得更好的性能,还是我需要考虑一个不同的数据库?

回答

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; 

这会给那些仅使用查询搜索/排序索引。

0

这在文档ORDER BY Optimization中有解释。特别是,如果用于选择WHERE子句中的行的索引与ORDER BY中使用的索引不同,则将无法使用ORDER BY的索引。

+0

我明白为什么它不起作用。我想知道是否有一个索引可以同时满足此查询中的WHERE和ORDER BY。 –

相关问题