なぜこのようなクエリに時間がかかるのか (文字通り 20 ~ 30 分) 教えてください。適切なインデックスが設定されているようですね。
UPDATE `temp_val_import_435` t1,
`attr_upc` t2 SET t1.`attr_id` = t2.`id` WHERE t1.`value` LIKE t2.`upc`
CREATE TABLE `attr_upc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`upc` varchar(255) NOT NULL,
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `upc` (`upc`),
KEY `last_update` (`last_update`)
) ENGINE=InnoDB AUTO_INCREMENT=102739 DEFAULT CHARSET=utf8
CREATE TABLE `temp_val_import_435` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`attr_id` int(11) DEFAULT NULL,
`translation_id` int(11) DEFAULT NULL,
`source_value` varchar(255) NOT NULL,
`value` varchar(255) DEFAULT NULL,
`count` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `core_value_id` (`core_value_id`),
KEY `translation_id` (`translation_id`),
KEY `source_value` (`source_value`),
KEY `value` (`value`),
KEY `count` (`count`)
) ENGINE=InnoDB AUTO_INCREMENT=32768 DEFAULT CHARSET=utf8
Ed Cottrell のソリューションは私にとってはうまくいきました。=
代わりに使用するとLIKE
、1000行の小さなテストクエリが大幅に高速化されました。
私は 2 つの方法で測定しました。1 つは phpMyAdmin で、もう 1 つは DOM ロードの時間を調べました (もちろん、他のプロセスが含まれます)。
DOM の負荷は 44 秒から 1 秒になり、98% 増加しました。
しかし、クエリ実行時間の差ははるかに劇的で、43.4 秒から 0.0052 秒になり、99.988% 減少しました。かなり良い。膨大なデータセットからの結果を報告します。