2011-12-29 142 views
-1

我有以下的SQL查询,它似乎运行正常,但我担心,因为我的网站增长它可能无法按预期执行,我想对此查询的效率和效率进行一些反馈真的是:这个MYSQL查询有什么问题

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

'EXPLAIN SELECT ...'会给你比我们更多信息。你在外键列上有索引吗?如果是这样,你很好。 – Interrobang 2011-12-29 09:45:04

+0

这是您网站上唯一的查询吗?你为什么认为这会成为一个问题? – newtover 2011-12-29 11:12:41

回答

0

你有GROUP BY子句,它只包含一列,但你拉的所有列没有汇总它们。你是否意识到GROUP BY中未指定的列的值返回而未汇总为are not guaranteed

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

所以,我想至少ORDER BY条款更改为类似这样:

ORDER BY MAX(created_date) 

或本:

ORDER BY MIN(created_date) 
0

一些潜在的改进(对于最佳的查询性能):

  • 确保您有对所有列的索引您查询
    注:请检查您是否真的需要对所有列的索引,因为具有负PERFORMA当BD必须建立索引时。 - >更多细节请看这里:http://dev.mysql.com/doc/refman/5.1/en/optimization-indexes.html
  • SELECT *会选择全部列的表。选择只有你真正需要的...