MySql查询,数据库设计,查询效率

时间:2011-11-07 13:58:52

标签: mysql

我已经在php和mysql上工作了1年。我在PHP中遇到了一些代码,程序员在这里编写了一个查询,并将其包含在for循环或foreach循环中,查询生成如下(需要65.134秒):

SELECT * from tbl_name where PNumber IN('p1','p2'.......,'p998','p999','p1000')

在我看来,我相信查询是可怕的,但是在我之前工作的人,他们说没有别的办法,我们必须处理它。然后我认为应该是错误的数据库设计。但无法想出解决方案。所以欢迎任何建议或意见。

要添加的东西。列被索引,表有近300万条记录。我给你的例子是p1,p2等。但那些原本是电话号码,如3371234567,5028129456等。最糟糕的是,我觉得这个列是varchar而不是int或big int,这使得比较更糟。我的问题是,我们可以称之为一个好的查询,还是一般化的错误,这取决于要求?

2 个答案:

答案 0 :(得分:1)

我发布这篇文章时希望我们可以通过举例来减少周转时间。

与您的开发人员核实并了解他们是如何生成SQL命令的。

所有这些数字必须来自某个地方。问他们在哪里。

如果数字来自表格,那么我们应该JOIN这两个表格。

实施例

授予电话号码存储在名为PHONE_NUMBERS的列中名为Phone的表格中 - 并使用我们与列tbl_name匹配的示例PNumber

SELECT t1.*
FROM tbl_name AS t1
    INNER JOIN PHONE_NUMBERS AS t2
    ON t1.PNumber = t2.Phone

然而,即使作为一个例子,这还不够。就像@George所说,你必须向我们提供有关数据结构和电话号码数据来源的更多信息。实际上,根据您向我们展示的数据类型和所需的结果,您的SQL查询可能需要使用IN语句而不是INNER JOIN语句。

请提供更多信息......

答案 1 :(得分:0)

如果您可以在查询中告诉我们explain的结果,有什么可以帮助我们。

即:

explain SELECT * from tbl_name where PNumber IN('p1','p2'.......,'p998','p999','p1000');

这将为我们提供有关数据库尝试执行的操作的一些信息。

相关问题