0

sellerid彼が利用できる日付 (日時)を保持する SQL テーブルを作成する必要があります。

また、売り手が利用可能な日付 (日時) を追加するたびに、それがテーブルに追加されます。

私はこのテーブルを使用することを考えました:

EVENTS

sellerid   date
123456     5/12/2013 8:10:00
121212     9/5/2013  19:40:00
123456     4/12/2013 12:00:00

しかし、私の問題は、このデータを取得する選択にあります。次のようなものですべてのアイテムを取得したい:

SELECT * From Events

しかし、これには時間がかかりすぎるのではないかと心配しています。だから私はこれが私が望むものを達成するための良い方法であるかどうかを知りたいです.それとも、この方法は多くの時間がかかりますか?

MySqlを使用しています。

4

3 に答える 3

1

完全なデータ (フィルターなし) が必要な場合は、データの「チャンク」を選択することをお勧めします。

select * from events limit 0, 1000; -- The first thousand rows
select * from events limit 1000, 1000; -- The next thousand rows
...

データをフィルタリングする必要がある場合は、テーブルに適切なインデックスがあることを確認する必要があります。具体的には、テーブル内の両方のフィールドにインデックスを付ける必要があります。インデックスをまだ作成していない場合:

alter table events
    add index idx_sellerId(sellerId),
    add index idx_date(date)

sellerIdと の両方でフィルタリングすると、これにより速度が向上するはずですdate

select * from events where sellerId=123456;
select * from events where date between '2013-5-12 00:00:00' and '2013-5-12 23:59:59'

あなたのフィールドに保存されているdateと の部分を分離しますが、それは私だけです。timedate

于 2013-03-03T19:05:15.560 に答える
1

データ (行) の量によって異なりSELECT * FROM tableますが、数十万のデータがない限り、そのような単純なクエリの場合はそれほど多くはかからないはずです。

とにかく、大量のデータがある場合は、日付間のクエリをフィルター処理することを検討する必要があります。MySQL の専門家はこれ以上詳しく説明できないかもしれませんが、私は 10,000 行を処理しており、非常に高速にロードされます。

于 2013-03-03T18:36:15.110 に答える
1

あなたは、sellerId でデータをフィルタリングすることになると思います。このフィールドにインデックスを作成すると、膨大な行数があっても非効率に直面することはありません。

于 2013-03-03T18:55:02.947 に答える