我有2个数据库,我需要链接两个大表(每个超过3M条目,不断增长)之间的信息。 第一个数据库有一个表“页面”,用于存储有关网页的各种信息,并包含每个网页的URL。列'URL'是一个varchar(512)并且没有索引。Mysql InnoDB性能优化和索引
的第二数据库具有定义为表 'urlHops':
CREATE TABLE urlHops
( dest
VARCHAR(512)NOT NULL, src
VARCHAR(512)DEFAULT NULL, timestamp
时间戳NOT NULL DEFAULT CURRENT_TIMESTAMP, KEY dest_key
(dest
) KEY src_key
(src
) )ENGINE = InnoDB的默认字符集= LATIN1
现在,我基本上需要发出(高效)这样的查询: 从db1.pages中选择p.id,p.URL,db2.urlHops u其中u.src = p.URL和u.dest =?
起初,我想在页面(URL)上添加一个索引。但是这是一个非常长的列,我已经在同一张表上发布了很多INSERT和UPDATE(比使用这个索引的选择的数量要多)。
我认为的其他可能的解决方案是: - 为页面添加一列,存储URL的md5散列并将其编入索引;通过这种方式,我可以使用URL的md5进行查询,并且可以在较小的列上使用索引。 - 添加另一个只包含页面标识和页面URL的表格,为两列编制索引。但是,这可能是浪费空间,只有不减慢我在'页面'上执行的插入和更新的优势。
我不想放慢插入和更新,但同时我可以有效地对URL进行查询。有什么建议?我最关心的是表现;如果需要,浪费一些磁盘空间不是问题。
谢谢你,至于
达维德
@Gary:我之前试过这样做,但是urlHops是我以极高的速度插入数据的表,所以我不能将它分成两部分(我基本上需要追加到它的src和dest夫妇URL)。如果我像这样分割它,那么它上面的插入就会减慢我的需要。 – 2010-06-09 21:32:09