私は次のように持ってTABLE1
います
+----------+----------+----------+----------+----------+
+ date + time + course + runner + position +
+----------+----------+----------+----------+----------+
+ 20120701 + 1200 + london + aaa + 1st +
+ 20120701 + 1200 + london + bbb + 2nd +
+ 20120701 + 1200 + london + ccc + 3rd +
+ 20120701 + 1300 + london + eee + 1st +
+ 20120701 + 1300 + london + fff + 2nd +
+ 20120701 + 1400 + new york + ggg + 1st +
+ 20120701 + 1400 + new york + hhh + 2nd +
+ 20120702 + 2000 + london + iii + 1st +
+ 20120702 + 2000 + london + aaa + 2nd +
+ 20120702 + 2100 + new york + iii + 1st +
+ 20120702 + 2100 + new york + bbb + 2nd +
+----------+----------+----------+----------+----------+
と2番目のテーブル
+------+----------+------+--------+--------+-----+------+-------+
+idtbl2+ date + time + course + runner + pos + link + total +
+------+----------+------+--------+--------+-----+------+-------+
+ 1 + 20120701 + 1200 + london + aaa + 1st + WWW + +
+ 1 + 20120701 + 1200 + london + aaa + 1st + XXX + +
+ 1 + 20120701 + 1200 + london + aaa + 1st + YYY + +
+ 1 + 20120701 + 1200 + london + aaa + 1st + XXX + +
+------+----------+------+--------+--------+-----+------+-------+
基本的にRUNNER
、1つのイベントでの競技者の数()をカウントし、そのカウントを2番目のテーブルのフィールドにTABLE1
更新する必要があります。TOTAL
TABLE2
ただし、TABLE1
サイズは8500レコードで、サイズTABLE2
は65,000レコードです。次のクエリを実行すると、タイムアウトになり、MySQL接続が失われます。
update table2 b, table1 a set b.total = (select count(a.runner) from table1 where a.date = b.date AND a.time = b.time AND a.course = b.course AND a.position != 'DQ' );
JOINについての私の限られた理解は、JOINが効率に役立たないと信じるように私を導きます、それで私はかなり立ち往生しています。そこに何かアイデアはありますか?
@MarkByers-
JOINは、両方のテーブルを連結した一時テーブルを作成します。私の考えでは、何があっても、あるテーブルの4つのフィールド(日付、時刻、コース、ランナー)を別のテーブルと比較する必要があります。
私はこれを試しましたが、タイムアウトします: