0

以下查询在 600 秒后超时。

update placed p
      ,Results r
  set p.position = r.position
  where p.competitor = r.competitor
    AND p.date = r.date 
    AND REPLACE(p.time,":","") = r.time; 

结构如下:

'CREATE TABLE `placed` (
  `idplaced` varchar(50) DEFAULT NULL,
  `date` decimal(8,0) DEFAULT NULL,
  `time` varchar(45) DEFAULT NULL,
  `field1` varchar(45) DEFAULT NULL,
  `competitor` varchar(45) DEFAULT NULL,
  `field2` int(2) DEFAULT NULL,
  `field3` varchar(45) DEFAULT NULL,
  `field4` varchar(45) DEFAULT NULL,
  `field5` decimal(6,2) DEFAULT NULL,
  `field6` decimal(10,2) DEFAULT NULL,
  `field7` decimal(6,2) DEFAULT NULL,
  `field8` char(1) DEFAULT NULL,
  `field9` varchar(45) DEFAULT NULL,
  `position` char(4) DEFAULT NULL,
  `field10` decimal(6,2) DEFAULT NULL,
  `field11` char(1) DEFAULT NULL,
  `field12` char(1) DEFAULT NULL,
  `field13` decimal(6,2) DEFAULT NULL,
  `field14` decimal(6,2) DEFAULT NULL,
  `field15` decimal(6,2) DEFAULT NULL,
  `field16` decimal(6,2) DEFAULT NULL,
  `field17` decimal(6,2) DEFAULT NULL,
  `field18` char(1) DEFAULT NULL,
  `field19` char(20) DEFAULT NULL,
  `field20` char(1) DEFAULT NULL,
  `field21` char(5) DEFAULT NULL,
  `field22` char(5) DEFAULT NULL,
  `field23` int(11) DEFAULT NULL
   PRIMARY KEY (`idplaced`),
  UNIQUE KEY `date_time_competitor_field18_combo` (`date`,`time`,`competitor`,`field18`)
) ENGINE=InnoDB AUTO_INCREMENT=100688607 DEFAULT CHARSET=latin1;

CREATE TABLE `results` (
  `idresults` int(11) NOT NULL AUTO_INCREMENT,
  `date` char(8) DEFAULT NULL,
  `time` char(4) DEFAULT NULL,
  `field1` varchar(45) DEFAULT NULL,
  `competitor` varchar(45) DEFAULT NULL,
  `position` char(4) DEFAULT NULL,
  `field2` varchar(45) DEFAULT NULL,
  `field3` decimal(2,0) DEFAULT NULL,
  PRIMARY KEY (`idresults`)
) ENGINE=InnoDB AUTO_INCREMENT=6644 DEFAULT CHARSET=latin1;

PLACED表有 65,000 条记录,该RESULTS表有 9,000 条记录。

我假设解决方案涉及JOIN一些描述性的陈述,并且我尝试从该站点获取一些建议,但根本找不到我正在寻找的答案。简而言之,我将不胜感激有关此的建议。如果需要,我可以提供示例表/创建表代码。

4

2 回答 2

0

首先,您最好将您的完整表格描述发送给我们,使用

show create table

其次,您最好使用连接语法:

update placed p
  join Results r on r.competitor = p.competitor
   set p.position = r.position
 where p.date = r.date 
   AND REPLACE(p.time,":","") = r.time;

希望这会有所帮助。

于 2012-08-06T06:48:09.120 回答
0

REPLACE由于您的操作,无法有效地使用索引来执行连接。我建议使用以下稍微不同的顺序创建一个索引:

(date, competitor, time, position)

在两个表上添加此索引也可能会有所帮助。

time如果您可以修改数据库中的数据,使列中的数据以相同的格式存储在两个表中,那就更好了。

于 2012-08-06T08:22:18.410 回答