-1

この簡単なクエリがあります

SELECT *,count(*) as total FROM `Artikels` group by `Manuf_nr` having total >1

ただし、結果が得られるまでに約 3 秒かかります。とにかく私はそれをスピードアップすることができますか?返信ありがとうございます。

4

3 に答える 3

0

Artikels の Manuf_nr 以外の列が未定義の行からのものであるため、スクリプトは奇妙な結果をもたらします (つまり、10 行に同じ Manuf_nr がある場合、10 になる可能性がありますが、それらの 10 行の詳細のうちのどれが select によって返されましたか?定かではありません)。

Manuf_nr のインデックスを想定すると、SQL はおそらく次のように書き直されるはずです。

SELECT a.*, b.total
FROM Artikels a
INNER JOIN (
    SELECT Manuf_nr, count(*) AS total 
    FROM `Artikels` 
    GROUP BY Manuf_nr
) b
ON a.Manuf_nr = b.Manuf_nr 
AND b.total > 1

これにより、Manuf_nr に複数の行がある各 Manuf_nr のすべての行が返されます。

于 2013-06-19T16:24:23.470 に答える