【发布时间】: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 table1 和 SELECT yyy, www, aaa FROM table2 之类的东西,并加入这些值。
谢谢大家!
【问题讨论】:
-
在查询中不使用
ORDER BY会怎样? -
如果您首先将两个表的输出限制为例如100,您的连接结果可能会产生少于 100 个元组,因此这可能会影响整体结果。您是否考虑过在连接列上创建索引?此外,对查询进行排序可能会减慢它的速度。
-
在查询中使用 EXPLAIN 可能有助于了解 MySQL 是如何执行查询的
-
按顺序减慢了很多...我不知道。感谢大家。正如 sebastian_oe 所说,现在我正在尝试处理索引。
-
实际上,问题不是我想的那样:删除订单以及限制查询工作得很好,我设法在几秒钟内得到输出(一个非常大的表)。感谢 Electrosa 和 Sebastian_oe 的基本帮助。
标签: php select join inner-join