3

MEDIMTEXTタイプの列を含む testing という名前のテーブルがあります。

mysql> desc testing;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id    | tinyint(4) | YES  |     | NULL    |       |
| data  | mediumtext | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

テーブルの内容は次のようになります--

mysql> select * from testing;
+------+--------------------------------+
| id   | data                           |
+------+--------------------------------+
|    1 | This is the first data entered.|
+------+--------------------------------+
1 row in set (0.00 sec)

dataid=1 で指定された列で、 「Concat me」などの別の文字列を連結して、 「これは最初に入力されたデータです。Concat me」のようにします。

を使用してそれを行うことができました

 UPDATE testing SET data=CONCAT(data,'Concat me') WHERE id=1;

しかし、最初にフィールド全体が読み取られ、次に連結され、最後に新しく作成された文字列が前のものに置き換えられると思います。
テキストが長すぎる場合、そうするのに多くの時間がかかります。
同様に15 MB、テキスト10 bytesと連結するテキストがある場合、15 MB が読み取られ、次に 10 バイトのデータが連結され、次に 15 MB+ 10 バイトのデータが書き戻されます。
連結する文字列を完全に置き換えるのではなく、最後に追加するだけの方法が他にあるのでしょうか。
10 バイトだけがデータベースに書き込まれるようにします。
私が間違っている可能性があり、mysql はコマンドを管理して効率的に機能させます。

4

1 に答える 1

1

あなたのupdate発言はまったく問題ありません。列にインデックスがdataある場合は、更新が遅くなる可能性があります。その場合、インデックスを無効にするか、更新前に削除して、更新の完了後に再度追加することができます。

于 2013-07-04T16:01:53.287 に答える