2013-10-03 171 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。 –

相關問題