【问题标题】:SQL JOIN, optimizationSQL JOIN,优化
【发布时间】:2013-12-08 05:50:44
【问题描述】:

我目前正在单个服务器上构建网站。数据库开始增长到近半 tera。我想知道如何加快 SQL 查询,尤其是在加入请求时...

事实上,当我做一个

SELECT * FROM table LEFT JOIN pofile on profile.id=table.id WHERE uid=useruid

table 和 profile 是大表(超过 500 万个输入)。但我想知道联合是如何执行的以及它是如何优化的,因为在我的情况下,如果我首先选择配置文件到 uid=useruid 我只有一百行,而其他条件将表减少到一千行,所以连接应该很快但不是似乎是这种情况,因为加入请求大约需要一秒钟,而 where 子句 ids、uids 是表中的索引。

有没有办法优化 SQL 连接?

【问题讨论】:

  • 而您的数据库引擎是(SQL 查询优化的整个艺术取决于数据库引擎及其版本)?您能否也显示准确的索引定义?

标签: sql optimization join


【解决方案1】:

当然。整个职业都以此为生。

您应该阅读解释计划和索引。有时,您可以达到 1000% 或更多的速度提升(当然,这取决于数据库的当前状态)。

【讨论】:

  • 关于你的回答,但我认为这不是一个答案,因为它太笼统了。
  • 它指出了解决这个问题(和相关问题)应该采取的方向。这比玩 witzhout 计划更有意义。您需要相当多的常识,在这种情况下没有直接的答案。
【解决方案2】:

您可以使用索引视图。由于拥有平衡的连接表树,这会提高您的性能。

【讨论】:

    【解决方案3】:

    它非常依赖于数据库引擎。如果您的查询这样做更好:

    WITH t AS (
    SELECT
      *
    FROM
      table
    WHERE uid=useruid
    ) 
    SELECT
      *
    FROM
      t
      LEFT JOIN
        profile
      ON
        profile.id = t.id 
    

    【讨论】:

    • 嗯,我以前在 select 中使用 select ...,但它更长。会试试这个!
    猜你喜欢
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 2018-01-27
    • 1970-01-01
    相关资源
    最近更新 更多