2014-07-14 77 views
-1

我不是MySQL男人,其實我是這樣做的,以幫助朋友。 我有一個的MySQL數據庫這些表:「order by」殺死性能

create table post (ID bigint, p text) 

create table user (ID bigint, user_id bigint) 

,我通過這個腳本查詢他們:

select * from post 
    where ID in (select user_id from user where ID = 50) 
    order by ID DESC --this line kills performance. 
    limit 0,20 

正如我在評論中提到,當沒有order by ID DESC,查詢執行速度非常快。但是當我將它添加到查詢中時,CPU佔用率很高,速度非常慢。你有什麼想法我做錯了什麼?

+4

也許沒有錯,只是排序是一項昂貴的操作。在「ID」列中是否有索引?表中有多少行? – Lamak

+0

限制成本,我相信。 –

+1

這個查詢的解釋計劃是什麼? –

回答

2

您應該將ID定義爲表的主鍵。這將添加索引並提高性能。至少作爲第一步,這是一個很好的例子。

這個查詢應該做的伎倆:

create table post (
    ID bigint, 
    p text, 
    PRIMARY KEY (ID)); 
+0

是否告訴我如何創建索引或將列定義爲PK。我是'T-SQL',這只是一次性使用'MySQL'。提前致謝 –

0

由於@frlan問題得到了由指標解決:

CREATE INDEX IDX_POST_ID ON post (ID); 
CREATE INDEX IDX_USER_ID ON user (ID); 
CREATE INDEX IDX_USER_USERID ON user (user_id);