【问题标题】:Inner JOIN performance: can I select only few values?内部 JOIN 性能:我可以只选择几个值吗?
【发布时间】:2013-10-29 16:50:22
【问题描述】:

我有一个大型数据集,出于学习原因,我需要在表格中输出,我在本地服务器上工作。 我先写了这段代码

mysqli_query($con,"SELECT xxx, yyy, zzz FROM table1 ORDER BY xxx ASC LIMIT 0, 100");

没关系,输出值需要一瞬间。 问题是我需要将 table1 连接到同一个数据库的另一个表,所以我这样做了

mysqli_query($con,"SELECT xxx, yyy, zzz FROM table1 INNER JOIN table2 ON table1.yyy=table2.yyy ORDER BY xxx ASC LIMIT 0, 100");

并且查询永远卡住了。

是否有一些编码错误?我认为没有,因为我在具有相同表结构的较小数据库上执行了相同的查询,并且它有效。

所以,我想问题是当我执行连接时,table2 中的所有值都会被调用,而我可怜的本地服务器无法完成查询(另外,我注意到使用了大量的磁盘空间,当执行第二个查询时,我谈论的是几个 GB 的空间)。 有没有办法从表 2 中只选择几条记录,就像我对表 1 所做的那样?我的意思是 SELECT xxx, yyy, zzz FROM table1SELECT yyy, www, aaa FROM table2 之类的东西,并加入这些值。

谢谢大家!

【问题讨论】:

  • 在查询中不使用ORDER BY 会怎样?
  • 如果您首先将两个表的输出限制为例如100,您的连接结果可能会产生少于 100 个元组,因此这可能会影响整体结果。您是否考虑过在连接列上创建索引?此外,对查询进行排序可能会减慢它的速度。
  • 在查询中使用 EXPLAIN 可能有助于了解 MySQL 是如何执行查询的
  • 按顺序减慢了很多...我不知道。感谢大家。正如 sebastian_oe 所说,现在我正在尝试处理索引。
  • 实际上,问题不是我想的那样:删除订单以及限制查询工作得很好,我设法在几秒钟内得到输出(一个非常大的表)。感谢 Electrosa 和 Sebastian_oe 的基本帮助。

标签: php select join inner-join


【解决方案1】:

我认为是字段冲突,

试试

mysqli_query($con,"SELECT xxx, yyy, zzz FROM table1 INNER JOIN table2 ON table1.yyy=table2.yyy ORDER BY YOUR_TABLE.xxx ASC LIMIT 0, 100");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 2021-03-27
    相关资源
    最近更新 更多