【问题标题】:mysql performance issues in SELECTSELECT 中的 mysql 性能问题
【发布时间】:2011-09-05 15:41:12
【问题描述】:

我有这些表:

IdToName: 

Id   Name 
1    A 
2    B 

RawData:

Son  Father 
B    A

我想创建一个名为 Data 的新表,其中我将使用 Id 而不是字符串,即:

Data: 
Son    Father 
2      1 

我使用这个查询来做到这一点:

INSERT INTO `Data`
    SELECT L.`ID`, P.`ID`
    FROM   `IdToName` L,
           `IdToName` P,
           `RawData` T
    WHERE T.Father = P.Name
    AND   T.Son = L.Name

我有关于 RawData 的儿子和父亲以及 IdToName 的姓名的密钥。对于 2,800,000 行,此查询大约需要 7 分钟。有谁知道如何提高性能?

【问题讨论】:

  • 你的列有索引吗?
  • 请包括SELECT ... JOIN的执行计划
  • EXAMPLE SELECT L.ID, P.ID <rest of the SELECT query> 的输出是什么?
  • 我不知道执行计划是什么:(我使用 ALTER TABLE ADD KEY 添加了键,它们与索引不一样吗?

标签: mysql performance join


【解决方案1】:

单独检查查询的时间。我强烈怀疑您所拥有的实际上是“INSERT 中的 MySQL 性能问题”,而不是“在 SELECT 中”。每秒 7000 次插入相当多,这可能是您机器的物理限制。

嗯,顺便说一句[编辑]:我们不知道您的表格(和内存)的确切形状和内容,但我认为在您的情况下任何索引都无济于事。

【讨论】:

    【解决方案2】:

    这会变慢的唯一明显原因是缺乏适当的索引。

    请将表 IdToName 中的 Id 索引到 UNIQUE,并将表 RawData 中的两列索引到 INDEX。

    【讨论】:

    • 您是指数据还是原始数据?据我所知,在插入之前添加索引会减慢速度。至于 RawData,我添加了键 - 这不一样吗?
    • 是的,我记下了那张桌子。您也可以尝试两者。
    猜你喜欢
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    相关资源
    最近更新 更多