左右连接的MySQL查询需要15分钟才能执行

时间:2013-07-30 11:57:53

标签: mysql sql performance database-performance

我们有一个旧系统,显示保存在数据库中的新闻源。它以前运作良好,完全没有问题。但是,现在查询不起作用,完成查询需要15分钟以上。为了测试,我尝试了许多方法来优化查询。但是,没有运气。如果有人能提出一些建议,我将不胜感激。当前数据库没有任何索引。如果有人认为我应该创建索引。请告诉我哪些表格和索引应该是什么。我对索引知之甚少。请找到我正在运行的查询以及ERD。

select *, DATEDIFF(Now(), Date) as Day, DATE_ADD(Date, INTERVAL 1 MONTH) as Diff from users
left join users_propertyvalues UPV USING(UserId)
left join propertyvalues PV USING(ValueId)
right join item_categories IC ON (IC.CategoryId=UPV.ValueId)
left join newsfeed USING(ItemId)
left join rss_feeds F ON(PV.ValueId=F.FeedId)
where EmailEnabled
having NOW() <= Diff
order by UserId, CategoryId, Date DESC

堆栈溢出不允许我上传ERD图片。如果有人想我可以将它上传到某个地方,请告诉我。

感谢您的帮助。[在此输入图片说明] [1]

1 个答案:

答案 0 :(得分:0)

索引应该在“加入”列上+为他们添加PK ... aditional您可以添加unique inedexes

ADD PK(它是主要的,并且是独一无二的):

`ALTER TABLE `test`     CHANGE `test` `test` INT(11) NOT NULL,    ADD PRIMARY KEY(`test`);`

ADD INDEX(姓名不管):

ALTER TABLE `test` ADD UNIQUE `NewIndex1` (`test`);

请参阅信息http://dev.mysql.com/doc/refman/5.5/en/optimization-indexes.html