【问题标题】:Mysql InnoDB performance optimization and indexingMysql InnoDB 性能优化和索引
【发布时间】: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


【解决方案1】:

您的 MD5 哈希建议非常好 - 它记录在 High Performance MySQL 2nd Ed 中。有几个技巧可以让它发挥作用:

创建表网址 ( id NOT NULL 主键 auto_increment, url varchar(255) 不为空, url_crc32 INT UNSIGNED 不为空, 索引 (url_crc32) );

选择查询必须如下所示:

SELECT * FROM urls where url='http://stackoverflow.com' AND url_crc32=crc32('http://stackoverflow.com');

url_crc32 被设计为与索引一起工作,包括 WHERE 子句中的 url 旨在防止哈希冲突。

我可能会推荐 crc32 而不是 md5。会有更多的冲突,但你有更高的机会将所有索引都放入内存中。

【讨论】:

    【解决方案2】:

    如果页面到 URL 是一对一的关系并且该表具有唯一的 id(主键?),您可以将该 id 值存储在 urlHops 表的 src 和 dest 字段中,而不是完整的 URL。

    这将使索引和连接更加高效。

    【讨论】:

    • 将尝试使用此解决方案,即使我没有 1 对 1 映射...我希望它能够很好地工作
    【解决方案3】:

    我会创建一个 page_url 表,其中包含 auto-inc 整数主键和您的 URL 值。然后更新 Pages 和 urlHops 以使用 page_url.id。

    您的 urlHops 将变为 (dest int,src int,...)
    您的 Pages 表将用 pageid 替换 url。

    索引 page_url.url 字段,你应该很高兴。

    【讨论】:

      猜你喜欢
      • 2014-01-12
      • 1970-01-01
      • 2013-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-05
      相关资源
      最近更新 更多