2011-12-29 140 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 *會選擇全部列的表。選擇只有你真正需要的...