2

私はこれを正しく行ったと確信していますが、私のクエリは通常のラップトップの MySQL データベースで 30 分間実行されています。"tweets" テーブルは 100 万レコードしかありません。

私が欲しいものは?テーブル "AAA" (左) と "BBB" (右) を検討してください。

id_str  text    id_str  text
------------    -------------------
13              13      foo bar baz
14              14      foobar
                13      foo bar baz
                17      foobaz

テーブルAの「テキスト」列にテーブルBのテキストを入力したい:

UPDATE AAA
SET `text` = (
    SELECT `text` AS `text`
    FROM BBB
    WHERE id_str = AAA.id_str
    LIMIT 1
)

テーブルAAAは次のようになります

id_str  text
-------------------
13      foo bar baz
14      foobar

ただし、前述のとおり、このクエリの実行時間は長すぎます。構文を間違えましたか?

4

2 に答える 2

1

私があなたの状況を正しく理解していれば、これははるかに速いはずです:

UPDATE `AAA`,`BBB` SET `AAA`.`text`=`BBB`.`text`
WHERE `AAA`.`id_str`=`BBB`.`id_str`

このクエリは1回だけ実行する必要があります。それでも数分かかる場合がありますが、この方法で(JOINを使用して)実行すると、100万の個別のクエリを実行するよりもはるかに高速になる可能性があります。

AAAid_strおよびBBBid_str両方ともインデックスが付けられ、できれば同じデータ型である必要があります。たとえば、両方がint(11)である必要があります。これにより、MySQLはそれらの間の同等関係を最大の効率で評価できます。

編集:私が言ったように、システム構成とハードウェアによっては、上記のクエリにはまだ時間がかかる場合があります(操作はディスクにバインドされている可能性があります。つまり、ハードディスクの速度によって制限されます)。MySQLがテーブルのインデックスを更新する必要があるためかもしれません-テーブルのステートメントをAAA見せていただけますか?または、これを試すこともできます。CREATE TABLEAAA

CREATE TABLE `CCC` LIKE `AAA`;
INSERT INTO `CCC` SELECT `AAA`.`str_id`,`BBB`.`text` FROM `AAA` JOIN `BBB` ON `AAA`.`id` = `BBB`.`id`;

ただし、これは古いテーブルからデータをコピーしませんAAA

于 2012-04-06T16:55:59.763 に答える
1
UPDATE AAA, BBB
SET AAA.`text` = BBB.text
WHERE BBB.id_str = AAA.id_str
于 2012-04-06T16:48:04.413 に答える