1

MSSQLデータベース全体を吸い上げる必要があるシステムがあります。現在、次のような方法でこれを行っています。

select top 1000 from table where id > 0 order by id;

次に、次のチャンクについて:

select top 1000 from table where id > 1000 order by id;

その後:

select top 1000 from table where id > 2000 order by id;

などなど。

MySQLでは、データベースが最初に結果をソートしてからカウントLIMITをスキャンする必要があるため、クエリの実行とOFFSETクエリが非常に遅いことOFFSETを学びました。そのカウントが大きくなると、読み取りカウントが急上昇するにつれて、人生は最悪になり始めます。

私の質問はこれです:同じ問題が当てはまりますTOPか?言い換えると、たとえば10,000,000レコードのデータベースでこれらのクエリを実行すると、読み取り数が非常に多くなると予想できますid > 9,999,000か?もしそうなら、これをよりよく処理する方法はありますか?

4

1 に答える 1

3

IDがインデックス化されている場合、非常に高速になります。その列が索引付けされていない場合は、全表スキャンが行われます。

さらに、次のことをお勧めします。

  select * from table where id > 0 and id <= 1000 order by id ;

このようにして、すべてのレコードがない場合、バグ (重複) はありません。

于 2012-08-14T00:11:32.187 に答える