通过PhpMyAdmin执行简单的SQL查询时遇到问题

时间:2011-06-27 15:35:19

标签: mysql sql database phpmyadmin

我通过PhpMyAdmin创建了一个数据库和两个表customer_full和customer_change。我成功地从两个文本文件填充了两个表,customer_full现在包含12902行,而customer_change有12947行,每行有一个CUSTOMER_ID字段来标识每个客户。 customer_change表有一些customer_full没有的新成员,我想捕获它们。

现在我需要做的任务很常见,我需要获取仅存在于customer_change表中但不存在于customer_full表中的行,因此我编写并执行了以下查询:

SELECT * FROM customer_change 
LEFT JOIN customer_full ON customer_change.CUSTOMER_ID = customer_full.ID 
WHERE customer_full.ID IS NULL

似乎在我在PhpMyAdmin中提交查询后,它将始终处于“等待http://localhost/phpmyadmin/import.php”并最终变为超时错误。 但是,如果我运行一些简单的查询,如

SELECT * FROM customer_change,customer_full

它将工作并通过简单地连接两个表中的每个记录来返回结果。所以我想知道任何专家可以帮我调试,可能是我的查询有效率问题还是我应该更多检查PhpMyAdmin的配置?或者我之前的查询失败还有其他可能的原因吗?

请原谅我,如果这很简单,因为我刚开始自学MySql。提前感谢所有的帮助。

1 个答案:

答案 0 :(得分:2)

这:

SELECT * FROM customer_change,customer_full  

是否是交叉连接,它将表customer_change中的每一行连接到customer_full中的每一行。所以它返回12,902 x 12,947 = 167,042,194行。不知道你为什么要这个。

你写的左边连接看起来是正确的:

SELECT * FROM customer_change 
LEFT JOIN customer_full ON customer_change.CUSTOMER_ID = customer_full.ID 
WHERE customer_full.ID IS NULL

缺少索引
为了使其快速运行,您需要在customer_change.CUSTOMER_ID上添加索引,在customer_full.ID上添加索引。
一旦你完成它,它应该立即运行。

腐败表
你的桌子也有可能腐败; ESP。如果您使用的是MyISAM 尝试并运行此链接中列出的步骤:
http://dev.mysql.com/doc/refman/5.0/en/corrupted-myisam-tables.html
或者此链接:http://www.thegeekstuff.com/2008/09/how-to-repair-corrupted-mysql-tables-using-myisamchk/