過去 2 日間解決しようとした問題があり、2 つのテーブルがworkspat
あり、xtractor_wrk
.
xtractor_wrk
250000 行を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 行を更新するために更新を遅らせることはできますか? どうすればいいですか?