我在服务器上有一个大型数据库。该数据库是关于目前拥有大约2千万条记录的手机号码。我想匹配我网站上的手机号码来过滤免打扰或非免打扰手机号码。我正在使用此查询进行小数过滤
SELECT phone_number
FROM mobnum_table
WHERE phone_number IN ('7710450282', '76100003451', '8910003402', '9410009850', '7610000191');
但是在条件下我想在几秒内过滤1,00,000个手机号码记录......? 我听说过SQL查询优化,但对此并不了解。另请指导我在这种情况下应考虑哪些存储引擎?
我已经用谷歌搜索了它,但没有找到那么多好的答案。
先谢谢..
答案 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