は、私はこの例外MySQLの長いクエリロック・タイムアウト例外
Lock wait timeout exceeded; try restarting transaction
を取得していますし、私はこのクエリを実行している、私を助けることができるしてください。
UPDATE Table1 INNER JOIN Table2
SET Table1.xCoord = Table2.Longitude, Table1.yCoord = Table2.Latitude,
Table1.location2 = CONCAT(Table2.Street, ', ', Table2.Post_Town, ', ',
Table2.County, ', ', Table2.Postcode, ', UK ')
WHERE (Table1.location2 = '' OR Table1.location2 IS NULL) AND
(Table1.location1 LIKE CONCAT('%', Table2.Street, '%'))
AND (Table2.location1 LIKE CONCAT('%', Table2.Post_Town, '%'));
表2は3000万行、表1は4000行です(増加する可能性があります)。私は1.ストリート2.町の指数を持っています。 Rick Iveさんに返信して、サンプルテーブルを与えました。
- 表1
|場所1 ||場所2 ||郵便番号
||フラット30 234ハードドライブストリートmorganvale ||(新しい文字列の追加)||
- 表2
||家なし||通り||町||郵便番号|| xcoord || ycoord ||
|| 234 ||ハードドライブストリート||モルガンベール|| mr12 123 || 5.1234 || 24.2345 ||
とLIKEパターンを使用して通りの名前と町に一致しています。カンマは削除され、location1はすべて小文字です。
私はAWSを使用しており、書き込み速度を向上させるために100GBの記憶容量があり、2GBのRAMを搭載したt2.smallを使用しています。
私の質問は、このクエリをより速く実行できるようにする方法と、ロック待機のタイムアウト例外を防止する方法です。クエリは正しいですか?
クエリの目的は、テーブル2の3000万のファイルからx座標とy座標と位置をtable1に追加することです。
私はいくつかの選択肢を考えていましたか? postgis postgisはこのクエリをmysqlより速く実行します。 Javaのようなアプリケーションからのこのテーブルの結合にはどうしたらいいですか?
このクエリでは、インデックスを使用してwhere条件を高速化することはできません。代わりに全文索引と全文検索を使用することを検討してください。 – Shadow
あなたのクエリは2つのテーブルの間にデカルト結合を作成し、4000万3000万のレコードを作成し、インデックスを使用する可能性はありません。あなたはこの運動を完全に再考する必要があります。 – Shadow
そして、我々はそれが何をするかわからないし、あなたのデータを知っていないので、質問がコアクトであるかどうかについてコメントする方法はありません。 – Shadow