7

fooこれらのフィールドで呼び出されるテーブルがあります。

- id

- type

- parentId

COUNT(*)親IDSのリストを、テーブルに表示される回数の降順で選択したいと思います。このようなもの:

SELECT DISTINCT parentId FROM `foo` 
ORDER BY (COUNT(parentId) DESC where parentId = parentId)

これを最も効率的な方法で実行し、サーバーへの負荷を最小限に抑えるにはどうすればよいでしょうか。

テーブルには数千から数十万のレコードが存在する可能性があるため、各レコードを手動で調べることはできません。

4

2 に答える 2

15

句を適用するだけでGROUP BY、インデックス、、、FOREIGN KEYまたはPRIMARY KEYonがあると仮定するparentIdと、パフォーマンスはかなり良好になります。(parentId可能性が高いように見えるFORIEGN KEYので、インデックスを適用するための制約を必ず定義してください)。

SELECT `parentId`
FROM `foo`
GROUP BY `parentId`
ORDER BY COUNT(*) DESC
于 2013-01-10T20:34:21.113 に答える
1

これを最も効率的な方法で実行し、サーバーへの負荷を最小限に抑えるにはどうすればよいでしょうか。

キーは最も効率的な方法です。

確かにCount()ではありませんが、最も効率的なのは...Countの結果を格納しているフィールドを読み取ることです。トリガーまたは挿入後に更新できます。

の場合は特に

テーブルには数千から数十万のレコードが存在する可能性があります

于 2013-01-10T20:36:34.630 に答える