这个MYSQL查询有什么问题

时间:2011-12-29 09:41:02

标签: mysql sql group-by sql-order-by

我有以下SQL查询,它似乎运行正常,但我担心随着我的网站增长它可能无法按预期执行,我想要一些反馈,这个查询真正有效和高效:

select * from articles where category_id=XX AND city_id=XXX GROUP BY user_id ORDER BY created_date DESC LIMIT 10;

基本上我想要实现的目标是将created_date的最新文章限制为10,只有符合以下条件才能选择文章:

  1. 城市ID必须等于给定值
  2. 类别ID必须等于给定值
  3. 每位用户只能返回一篇文章
  4. 文章必须按日期排序,且必须返回前10篇最新文章

2 个答案:

答案 0 :(得分:0)

一些潜在的改进(为了获得最佳查询性能):

  • 确保您查询的所有列都有索引。注意:检查您是否确实需要所有列的索引,因为当BD必须构建索引时,这会产生负面影响。 - >有关详细信息,请查看此处:http://dev.mysql.com/doc/refman/5.1/en/optimization-indexes.html
  • SELECT *会选择表格的所有列。只选择你真正需要的......

答案 1 :(得分:0)

你有一个GROUP BY子句只包含一列,但是你要拉出所有列,而不是聚合它们。您是否意识到为GROUP BY中未指定且未汇总are not guaranteed的列返回的值?

您还在ORDER BY子句中引用了这样一个列。由于无法保证该列的值,因此即使没有对基础表进行更改,也无法保证随后对此脚本的调用将返回哪些行。

所以,我至少会将ORDER BY子句更改为:

ORDER BY MAX(created_date)

或者这个:

ORDER BY MIN(created_date)