SQL:同一表上的多个连接的性能

Posted

技术标签:

【中文标题】SQL:同一表上的多个连接的性能【英文标题】:SQL: Performance of Multiple Joins on Same Table 【发布时间】:2012-02-13 04:25:27 【问题描述】:

Stack Overflow 的访问者,

我正在用 php 构建一个研究应用程序,用户可以在其中输入它自己的变量。这些变量通常是数字的。可以为每个数值附加一个文本标签,以提高数据的可读性。即记录显示为:


记录 1:值 0、值 1、值 1、值 3、值 2

记录2:..


代替:


记录 1:0、1、1、3、2

记录2:..


为了将数值数据转换为对应的标签,我必须对保存文本表示(标签)的(相同)表执行大量连接。我的问题是双重的:

    mysql 中对同一个表(别名)执行多个连接是否会对性能产生很大影响? 这种连接的最佳 SQL 语法是什么?

当然,我欢迎任何其他建议!

期待你的回答!

汤姆

【问题讨论】:

删除了我的答案,但认为 OP 的这条评论值得在这里发布给其他人:“用户完全有可能拥有 100 个变量,每次检索一个变量时需要 100 次连接到标签表记录。我想知道仅通过 SQL(由于灵活性而首选)或执行两个单独的查询,用 PHP 中的标签替换数据,在性能上会有多大差异?" 【参考方案1】:

为什么没有这样的记录结构:

table `user_variables`:
    user_id   int
    var_name char,
    var_value char

不需要自连接,因为每个名称/值对都有自己的记录。

【讨论】:

以上是关于SQL:同一表上的多个连接的性能的主要内容,如果未能解决你的问题,请参考以下文章

同一张表上的多个连接,在一个查询中计数

Mysql在同一张表上的多个左连接

优化大型表上的 SQL 连接

在同一个表上具有多个连接的 Oracle 复杂查询

使用右表上的总和分组对多列进行 SQL 连接

同一组连接表上的 Mysql 联合