3

一度に 20 以上の挿入ステートメントを作成する必要があります。そこを使用UNIX_TIMESTAMP()して、時間列にエポックからの秒数を挿入しています。

私のPHPタイムゾーンはUTC

だから私は$time = time()値を挿入するために使用する必要UNIX_TIMESTAMP()がありますか、それとも問題ありません。

4

3 に答える 3

1

時間()

time —現在のUnixタイムスタンプを返します

UNIX_TIMESTAMP()

引数なしで呼び出された場合、Unixタイムスタンプ( '1970-01-01 00:00:00' UTCからの秒数)を符号なし整数として返します。

私にはそれらは同じものに見えます。ですから、最適化のためだけにどちらかを選択することを正当化するのに十分なほど顕著な違いがあるのではないかと私は強く疑っています。コードを読みやすく理解しやすいものを選択することをお勧めします。MySQLは一度に非常に多くのアクションを処理できるため、タイムスタンプを取得するなどの些細なことを行うのはほぼ瞬時です。

于 2013-02-14T04:34:23.283 に答える
1

何をするにしても、効率ではなく機能性に基づいて決定してください。100 個の挿入ステートメントを使用しても、おそらく違いは感じられないでしょう。

どのオプションを選択するかは、機能要件によって異なります。

  1. 各ステートメントの値が同じであることを絶対に確認する必要がある場合は、値を「キャッシュ」し、time()それを使用して挿入を行う必要があります。ところで、これは MySQL または PHP で実行できます (以下を参照)。

  2. それ以外はお好きなものをお選びください。

複数のレコードを挿入する場合は、準備済みステートメントを検討してください。そうすることで、主にコードとデータベース間を移動する必要があるデータの量が少なくなるため、insert ステートメントがより大幅に高速化される可能性があります。例えば:

SET @time = UNIX_TIMESTAMP();
PREPARE stmt FROM 'INSERT INTO mytable VALUES (@time)';
EXECUTE stmt;
EXECUTE stmt;
EXECUTE stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
于 2013-02-14T04:39:17.347 に答える
0

10 億行を挿入する予定で、挿入に丸 1 日かかる場合で、タイムスタンプが問題になることを本当に避けたい場合は、データの所有者に、すべてを挿入しても問題ないかどうか尋ねてください。同じタイムスタンプを持つ行。次に、タイムスタンプの単一世代を使用して変数に入れ、それをすべての挿入ステートメントで値として使用します。このようにして、挿入ごとに実行するコードが少なくなります。しかし、それは、データに満足している場合、データが誰のものであるか次第です:)

于 2013-02-14T06:44:28.987 に答える