これは製品テーブルであり、数百万のレコードがあります。
以下のようにレコードをリストしたい:
通常私は使用します:
SELECT id,
product_name,
store_id
FROM product
GROUP BY store_id
ORDER BY id.
現在SQLパフォーマンスの問題があります。このような結果を出力するにはSQLクエリが必要です。
これは製品テーブルであり、数百万のレコードがあります。
以下のようにレコードをリストしたい:
通常私は使用します:
SELECT id,
product_name,
store_id
FROM product
GROUP BY store_id
ORDER BY id.
現在SQLパフォーマンスの問題があります。このような結果を出力するにはSQLクエリが必要です。
これを解決する方法はたくさんありますが、私が推奨する方法の 1 つは、それぞれの最新情報をID
(列がedであると仮定してAUTO_INCREMENT
)個別に取得するサブクエリに参加することstore_ID
です。
SELECT a.*
FROM tableName a
INNER JOIN
(
SELECT store_ID, MAX(ID) max_ID
FROM tableName
GROUP BY store_ID
) b ON a.store_ID = b.store_ID AND
a.ID = b.max_ID
パフォーマンスを向上させるには、次の列に必ずインデックスを作成してください:ID
およびstore_id
.
更新 1
すべてのレコードに制限を設けたい場合は、以下を使用してください。
SELECT ID, product_Name, store_ID
FROM tableName a
WHERE
(
SELECT COUNT(*)
FROM tableName b
WHERE b.store_ID = a.store_ID AND b.ID >= a.ID
) <= 2;
SELECT store_id,id,product_name FROM table_name
WHERE id IN (SELECT MAX(id) FROM table_name GROUP BY store_id)
ORDER BY id
これは機能するはずであり、req に従って store_id または id のいずれかで注文できます。
これを試してください:
SELECT * FROM YOURTABLE B
JOIN (SELECT MAX(ID) MX FROM YOURTABLE GROUP BY STORE_ID) A
ON A.STORE_ID = B.STORE_ID
AND B.ID = A.MX
GROUP BY B.STORE_ID
;