1

過去 2 日間解決しようとした問題があり、2 つのテーブルがworkspatあり、xtractor_wrk. xtractor_wrk250000 行をworkspat含み、6700 万行を含みます。

CREATE TABLE `xtractor_wrk` (
  `db_time` datetime DEFAULT NULL,
  `db_position` point NOT NULL,
 `db_namn` char(50) CHARACTER SET utf8 COLLATE utf8_swedish_ci NOT NULL,
 `db_sis` mediumint(8) unsigned DEFAULT NULL,
 `db_om` smallint(5) unsigned DEFAULT NULL,
 `db_seq` char(50) DEFAULT NULL,
 `db_grarri` datetime DEFAULT NULL,
 `db_grtime` datetime DEFAULT NULL,
 KEY `db_time` (`db_time`),
 KEY `db_sis` (`db_sis`),
 KEY `db_om` (`db_om`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC

CREATE TABLE `workspat` (
 `db_time` datetime NOT NULL,
   `db_point` point NOT NULL,
 `db_om` smallint(6) NOT NULL,
 `db_sis` mediumint(8) NOT NULL,
 `db_status` char(10) CHARACTER SET latin1 NOT NULL,
 KEY `db_sis` (`db_sis`),
 KEY `db_om` (`db_om`),
 KEY `db_time` (`db_time`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci

私には2つの問題があります:

私がしたいのは、テーブル xtractor_wrk を MAX( workspat.db_time) と MIN( workspat.db_time) で更新し、以下の「ON」から取得することです。

私は多くのことを試しましたが、私がいくらかうまくいったと思うのはこれだけでした:

UPDATE xtractor_wrk 
JOIN workspat 
ON  date(xtractor_wrk.db_time) =    date(workspat.db_time) 
    and xtractor_wrk.db_om = workspat.db_om 
    and    xtractor_wrk.db_sis = workspat.db_sis 
SET xtractor_wrk.db_grtime =    workspat.db_time

もちろん、これはMAXとMINの更新を私に与えるわけではありませんxtractor_wrk。これは、リモートでも機能した唯一のものです。

workspat.db_time は任意の数の一致を持つことができ、最高と最低が必要であり、それらを書き込みxtractor_wrk.db_grtimeますxtractor_wrk.db_grarri

速度にも問題があります。インデックス作成を試みましたが、それでも非常に遅いです。テーブル全体にインデックスを作成する方法はありますか、それともすべての更新が問題ですか? 更新する代わりに結果を新しいテーブルに書き込むか、250000 行を更新するために更新を遅らせることはできますか? どうすればいいですか?

4

1 に答える 1