【发布时间】:2010-06-09 20:48:38
【问题描述】:
我有 2 个数据库,我需要在两个大表之间链接信息(每个表超过 300 万个条目,并且不断增长)。 第一个数据库有一个表'pages',存储有关网页的各种信息,并包括每个网页的URL。 'URL' 列是 varchar(512) 并且没有索引。
第二个数据库有一个表'urlHops'定义为:
创建表urlHops (
dest varchar(512) 非空,
src varchar(512) 默认为空,
timestamptimestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
键dest_key (dest),
键src_key (src)
) ENGINE=InnoDB 默认字符集=latin1
现在,我基本上需要(有效地)发出这样的查询: select p.id,p.URL from db1.pages p, db2.urlHops u where u.src=p.URL and u.dest=?
起初,我想在页面(URL)上添加一个索引。但这是一个很长的列,我已经在同一张表上发出了很多 INSERT 和 UPDATE(比我使用这个索引做的 SELECT 的数量要多)。
我认为的其他可能的解决方案是: - 向页面添加一列,存储 URL 的 md5 哈希并对其进行索引;通过这种方式,我可以使用 URL 的 md5 进行查询,并具有较小列上的索引的优势。 - 添加另一个只包含页面 id 和页面 URL 的表,索引这两列。但这可能会浪费空间,其优点是不会减慢我在“页面”上执行的插入和更新速度。
我不想减慢插入和更新的速度,但同时我将能够有效地对 URL 进行查询。有什么建议吗? 我最关心的是性能;如果需要,浪费一些磁盘空间不是问题。
谢谢你,问候
大卫
【问题讨论】:
-
@Gary:我之前尝试过这样做,但是 urlHops 是一个我以非常高的速度插入数据的表,所以我不能将它一分为二(我基本上需要附加到它src 和 dest URL)。如果我这样拆分它,那么它上面的插入速度就会太慢,无法满足我的需要。
标签: mysql performance optimization indexing innodb