mysqlページングによる重複データの取得
2017 ワード
オンライン上で問題が発生しました.mysqlを使用してページを分割してデータを取得すると、合計1万件のデータが取得されます.ページを分割して取得すると、いくつかの重複が発生します.また、重複するたびにデータが異なりますが、直接全量取得すると問題ありません.データベース構築文は次のとおりです.
ページングデータを取得するsqlは、次のとおりです.
調べてみるとmysqlには、order byのフィールドがuniqueではなく、値が同じ行である場合、これらのデータの戻り順は未定であることがわかりました.これは、msyqlがソートを行う際に同じ値の相対的な順序が変わらないことを保証できないためです.このような2回のクエリは、データの順序が未定であるため、1行のデータが2ページに表示され、mysql公式に関連する議論があります.これはmysqlの特性で、bugではありません.興味があれば見てもいいです.mysql公式討論
CREATE TABLE point (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
address varchar(64) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT ' ',
create_time int(11) NOT NULL DEFAULT '0' COMMENT ' ',
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT=' ';
ページングデータを取得するsqlは、次のとおりです.
select * from point order by create_time desc limit 0,10
調べてみるとmysqlには、order byのフィールドがuniqueではなく、値が同じ行である場合、これらのデータの戻り順は未定であることがわかりました.これは、msyqlがソートを行う際に同じ値の相対的な順序が変わらないことを保証できないためです.このような2回のクエリは、データの順序が未定であるため、1行のデータが2ページに表示され、mysql公式に関連する議論があります.これはmysqlの特性で、bugではありません.興味があれば見てもいいです.mysql公式討論