私の目的
一意のみを含む複数のランダム行を取得しようとしていますuserid
が、type
列がランダムになるようにするには、またはtype
のみを使用できます。問題のテーブルには、常に 1,000 行未満が含まれます。0
1
私のテーブル
CREATE TABLE tbl_message_queue (
userid bigint(20) NOT NULL,
messageid varchar(20) NOT NULL,
`type` int(1) NOT NULL,
PRIMARY KEY (userid,messageid,`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
サンプルデータ
userid | messageid | type
---------------------------------------------------
4353453 | 518423942 | 0
4353453 | 518423942 | 1
2342934 | 748475435 | 0
2342934 | 748475435 | 1
7657529 | 821516543 | 0
7657529 | 821516543 | 1
0823546 | 932843285 | 0
0823546 | 932843285 | 1
何を除外するか
ORDER BY RAND()
これらのタイプのクエリのうち少なくとも 18,000 を超えるクエリが常にアプリケーションによって実行され、高負荷を引き起こしているため、使用することは現実的ではありません。SELECT DISTINCT
orを使用するGROUP BY
と (明らかに) より効率的で、常に一意のuserid
ものを選択しますが、常に許容可能な負荷とtype
等しくなります。0
一般的な方法は列を作成することですが、別の方法のみid
を探しています。グループの主キーは必須であり、アプリケーションに深く統合されているため変更できませんが、各列の構造は変更できます。
ありがとう。