タイム・ソートによるページング・クエリーによるデータの一部の損失の原因

793 ワード

シーン:
時間順にページングしてトランザクション・テーブルを問合せた場合、合計数は問題ありませんが、1ページから次のページまでの間、各ページごとに区切られた場所でレコード・セクションが失われる可能性があります.
分析:
SELECT id, orderNo, addTime
FROM deal_tab
ORDER BY addTime DESC
LIMIT 1,20

データベースの格納時間が最低単位から秒までの場合、取引が多い場合、同じ時間に生成された複数の注文がテーブルに表示され、時間でソートされると、データベースは時間の前後を判断しにくくなります.このような見分けのつかない記録が2ページで区切られた場所に表示されると、ページング時に1/数件の注文が「隠されている」現象を引き起こす可能性があります.記録を表示している間に見えなくなります.
解決:
1、第1の解決方法は、もちろんデータベースに格納された時間フィールドがミリ秒数を最小単位とすることで、このような状況を回避することができる.
2、ある時点で取引量が極めて大きい場合、ミリ秒数も同じ注文が出ることも可能である.この場合、自己成長idのような別のフィールドでソートを補助することができ、決して繰り返されず、記録によってデータテーブルに入って増大する.
SELECT id, orderNo, addTime
FROM deal_tab
ORDER BY addTime DESC, id
LIMIT 1,20