添加一个连接时,MySQL执行时间会增加(LONG POST)

时间:2014-08-05 11:53:21

标签: mysql

我正在处理一组名称和地址文件,并有一组名称地址等的表格。特别是当我在名字中读取姓氏,名字,中间名等都进入一个名为'的简单表名字'我只有大约2000个条目。

CREATE TABLE name (
    nameid      int unsigned NOT NULL auto_increment PRIMARY KEY,
    name        varchar(50) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

然后我创建一个'全名'作为一组'名称'ID

CREATE TABLE fname (
    fnameid     int unsigned NOT NULL auto_increment PRIMARY KEY,
    lastid      int unsigned,
    firstid     int unsigned,
    name2id     int unsigned,
    name3id     int unsigned,
    name4id     int unsigned,
    name5id     int unsigned,
    name6id     int unsigned
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

我正在使用MyISAM,因为我需要将数据分开而不是集中到ibdata1。

这是数据库A.我的查询是这样的......

select ln.name last, fn.name first, ...
from lived l
inner join person p on p.personid = l.personid
inner join fname f on f.fnameid = p.fnameid
inner join name ln on ln.nameid = f.lastid
left outer join name fn on fn.nameid = f.firstid
...
where ln.name like 'washington';

并且大约需要0.2秒。姓氏加入是重要的一点。

我需要将姓氏与其他任何名字分开,然后我将所有姓氏读入新表“last”,所有其他人仍然会进入'name'。

CREATE TABLE last (
    lastid      int unsigned NOT NULL auto_increment PRIMARY KEY,
    name        varchar(50) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

我已将此读入新数据库B并执行新查询,其中唯一的区别是使用'last'作为姓氏(以大写字母突出显示)。

select ln.name last, fn.name first, ...
from lived l
inner join person p on p.personid = l.personid
inner join fname f on f.fnameid = p.fnameid
inner join LAST ln on ln.LASTID = f.lastid
left outer join name fn on fn.nameid = f.firstid
...
where ln.name like 'washington';

现在查询大约需要12秒。

如果我现在在数据库A中创建一个'last'表(按照B)并将'name'中的所有数据复制到其中,从而保留id并使用上面的第二个查询,以便现在的姓氏来自new对于A,查询时间仍为约0.2秒。所有表的创建完全相同,我只更改USE DATABASE A或B

我使用完全相同的数据并验证我使用的每个其他表在A和B中是相同的。

我无法解释为什么数据库B如此缓慢,因为这是我需要迁移到的。

0 个答案:

没有答案