2014-07-14 3 views
-1

Я не MySQL парень, на самом деле я делаю это, чтобы помочь другу. У меня есть эти таблицы в базе данных MySQL:"заказать по" убивает производительность

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, запрос выполняется очень быстро. Но когда я добавляю это к запросу, он очень медленно работает с огромным использованием ЦП. Вы знаете, что я делаю неправильно?

+4

Наверное ничего плохого, только что упорядочение является дорогостоящим оператором. У вас есть индекс в столбце «ID»? Сколько строк в таблице? – Lamak

+0

LIMIT стоит тоже, я считаю. –

+1

Каков план объяснений для этого запроса? –

ответ

2

Вы должны определить идентификатор в качестве основного ключа для своей таблицы. Это добавит индекс и увеличит производительность. По крайней мере, как первый шаг, это хороший.

Этот запрос должен сделать трюк:

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); 
Смежные вопросы