"按顺序排列"杀死表现

时间:2014-07-14 19:53:21

标签: mysql sql

我不是 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时,查询执行速度非常快。但是当我将它添加到查询中时,由于CPU使用率很高,因此速度非常慢。你知道我做错了什么吗?

2 个答案:

答案 0 :(得分:2)

您应该将ID定义为表的主键。这将添加索引并提高性能。至少作为第一步,它是一个好的。

此查询应该可以解决问题:

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

答案 1 :(得分: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);