| PAGELETS | CREATE TABLE `PAGELETS` (
`page_key` int(32) unsigned NOT NULL,
`pagelet_serial` int(32) unsigned NOT NULL,
`pagelet_shingle` int(32) unsigned NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
私は希望へ:上
SELECT * FROM PAGELETS WHERE pagelet_shingle IN(SELECT pagelet_shingle FROM PAGELETS GROUP BY pagelet_shingle HAVING COUNT(DISTINCT page_key) > 1) ORDER BY pagelet_shingle;
残念ながら、この半正解を生成し、クエリで
1) Find all the pagelet_shingles where quantity > 1 (occurs more than once)
2) out of these only output those that have different page_key
小さなデータセットには約18秒かかります。
私は別のクエリ、(あなたと一緒に何かを* ..グループを選択することはできません)技術的に正しいではなくて、LOT高速化された結果を生成し、専門家によって与えられた
SELECT dt1.* FROM
(SELECT * FROM PAGELETS
GROUP BY page_key, pagelet_shingle HAVING COUNT(*) = 1)
dt1 JOIN
(SELECT * FROM PAGELETS GROUP BY pagelet_shingle HAVING COUNT(*) > 1)
dt2 USING (pagelet_shingle) ORDER BY pagelet_shingle
を持っていますpagelet_shingle = 57
+----------+----------------+-----------------+
| page_key | pagelet_serial | pagelet_shingle |
+----------+----------------+-----------------+
| 1 | 99 | 57 |
| 1 | 99 | 57 |
| 2 | 228 | 57 |
| 2 | 228 | 57 |
+----------+----------------+-----------------+
半正しいクエリが
を生成するページレットからケースSELECT *
+----------+----------------+-----------------+
| page_key | pagelet_serial | pagelet_shingle |
+----------+----------------+-----------------+
| 1 | 99 | 57 |
| 1 | 99 | 57 |
| 2 | 228 | 57 |
| 2 | 228 | 57 |
+----------+----------------+-----------------+
間違ったクエリがpagelet_shingleを持っていませんが= 57
その結果セットでの私の望ましい結果は、一度だけ
+----------+----------------+-----------------+
| page_key | pagelet_serial | pagelet_shingle |
+----------+----------------+-----------------+
| 1 | 99 | 57 |
| 2 | 228 | 57 |
+----------+----------------+-----------------+
に各破壊に対する持っていることです。
同じpagelet_serialで2回発生するpagelet_shingleは省略されます。間違った1 2の速度に到達するためにcsemi orrectクエリをスピードアップするための方法があります) 1)またはそれに間違ったものを修正する方法があります:
だから私は、次お願いしたいと思います正しい結果を出す(私は厳密さを気にしない)
みんなを助け、IN pagelet_shingleは、ORDER BY(COUNT(DISTINCT page_key)> 1 HAVING pagelet_shingle BYレットグループからpagelet_shingleを選択)ページレット* FROM DISTINCT SELECT :このうち
チェックpagelet_shingle; これを解決しますが、どうすれば速くすることができますか? –
mysql> EXPLAIN SELECT DISTINCT *ここからpagelet_shingle IN(SELECT pagelet_shingleからページンググループへ)pagelet_shingle HAVEING COUNT(DISTINCT page_key)> 1)ORDER BY pagelet_shingle; | 1 | PRIMARY | PAGELETS |すべて| NULL | NULL | NULL | NULL | 6959 |どこで使用するか。一時的な使用。 filesortの使用| | 2 |独立したサブクエリ| PAGELETS |インデックス| NULL | pagelet_shingle | 8 | NULL | 6959 |インデックスの使用| –
インデックスを追加しました。 | PAGELETS | 'page_key' int(32)unsigned NOT NULL、 ' pagelet_serial' int(32)unsigned NOT NULL、 'pagelet_shingle' int(32)unsigned NOT NULL、 KEY' pagelet_shingle'( 'pagelet_shingle ') )ENGINE = MyISAM DEFAULT CHARSET = utf8 | SELECT DISTINCT * pagelet_shingle where(pagelet_shingleからページンググループへ)pagelet_shingle HAVEING COUNT(DISTINCT page_key)> 1)ORDER BY pagelet_shingle; はまだ地獄のように遅いです –