2010-10-13 153 views
1

SQL的下面很简单的代码片段失败:MySQL的UPDATE语句超时

UPDATE smalltable,bigtable 
SET smalltable.ssn=bigtable.ssn 
WHERE smalltable.last = bigtable.last && smalltable.first = bigtable.first; 

BigTable中有16000多条记录 - 不是真的那么大的SQL。小表大约有300个。出于某种原因,这个表述超时(> 30秒)。为什么?它看起来很简单,并且数据不难处理:不是很多重复,短字段(VARCHAR(20))等等。

我做错了什么?我只是试图用bigtable中的简单(或我想)查找来更新smalltable中的记录。

编辑:很可能相关:smalltable是一个LOCAL INFILE

+0

你能张贴smalltable和BigTable中创建表?看起来你没有连接列上的索引(第一个和最后一个)。 – a1ex07 2010-10-13 15:03:46

+0

bigtable有很多不相关的记录(总共175个),但关键的记录是last和first,它们是VARCHAR(20)和ssn,它们是VARCHAR(16)。小桌子正是这三个领域。 – Charles 2010-10-13 15:07:43

回答

5

你对指数:

smalltable.last, bigtable.last, smalltable.first, bigtable.first 
+1

Doh!删除我的答案;这个更好。 +1。 – 2010-10-13 15:05:08

+0

这不是我的数据库,所以我想它已经建立了索引,至少在像bigtable这样的重要表格上。不,它不是!现在MySQL报告它花了0.000秒。 – Charles 2010-10-13 15:13:16