2014-03-03 95 views
-1

哪一個是最快/最有效的?兩者都有效。哪一個速度最快?在子查詢中計數或與

解由ID 1分組:

SELECT 
    *, 
    COUNT(*) AS pages 
FROM 
    notis 
WHERE 
    cid = 20 
GROUP BY 
    n.id 
ORDER BY 
    nid DESC 

解在子查詢2.計數:

SELECT 
    *, 
    (select count(*) FROM notis WHERE cid=20) AS count 
FROM 
    notis 
WHERE 
    cid = 20 
ORDER BY 
    nid DESC 
+0

Downvoter:爲什麼你不喜歡我好奇的問題將不勝感激。提前致謝! – FooBar

+0

這些看起來不像他們會產生相同的輸出。 –

+0

第一個是無效的(標準)SQL,而不是拒絕它,而是MySQL將返回隨機數據。 –

回答

0

enter image description here

溶液1是最佳和快: 因爲溶液2有子查詢

但是你有t o改變你的查詢:

SELECT *, COUNT(*) AS pages 
    FROM notis 
    WHERE cid = 20 
    GROUP BY nid 
    ORDER BY nid DESC 

你改變了GROUP BY和ORDER BY的位置。

如果您要查找計數(*),或者您想要每nid計算一次,請輸入您的電話號碼。如果count(*),則考慮不使用GROUP BY

SELECT *, COUNT(*) AS pages 
FROM notis 
WHERE cid = 20 
ORDER BY nid DESC 
+0

'group by'用法是無效的(標準)SQL,而不是拒絕它MySQL寧願選擇隨機結果:http://www.mysqlperformanceblog.com/2006/09/06/wrong-group-by-makes-您的查詢 - 脆弱/ –

+0

@a_horse_with_no_name。 。 。更準確地說,擴展組的使用導致匹配行的*任意*值。實際上,隨機性是一個非常困難的特性。 (文檔使用「indeterminate」一詞,http://dev.mysql.com/doc/refman/5.7/en/group-by-extensions.html。) –