从大数据库中查找大数据的SQL查询

时间:2017-04-06 15:46:29

标签: mysql sql optimization rdbms

我在服务器上有一个大型数据库。该数据库是关于目前拥有大约2千万条记录的手机号码。我想匹配我网站上的手机号码来过滤免打扰或非免打扰手机号码。我正在使用此查询进行小数过滤

SELECT phone_number
FROM mobnum_table
WHERE phone_number IN ('7710450282', '76100003451', '8910003402', '9410009850', '7610000191');

但是在条件下我想在几秒内过滤1,00,000个手机号码记录......? 我听说过SQL查询优化,但对此并不了解。另请指导我在这种情况下应考虑哪些存储引擎?

我已经用谷歌搜索了它,但没有找到那么多好的答案。

先谢谢..

2 个答案:

答案 0 :(得分:1)

我认为您的要求本身存在一些问题。如果您告诉我们更多关于您的问题的信息,我们可以帮助您。无论如何,在IN中给出所有100000个数字并不是一个好主意。一种选择是创建另一个表并进行内部联接。

假设您有另一个包含selectednumbers列和id列的表phone_number, 你可以按如下方式进行内连接

SELECT phone_number FROM mobnum_table a inner join selectednumbers b on 
a.phone_number=b.phone_number

正如我前面提到的,你的问题并不完整。所以请提供更多信息,以便我们提供优化的查询。

答案 1 :(得分:0)

您是否正在生成100,000个号码的列表,然后将其重新放入另一个查询中?

如果您从表格中获取数字,请首先采用生成数字列表的查询,将其放在in()括号中,然后立即看到大幅改进

重新构建它们以使用JOIN而不是in(),你会看到更多。

或者,取决于您的数据库结构,只需执行

SELECT phone_number
FROM mobnum_table
WHERE DND = 1