sql/database 查询或 file_get_content 哪个检查速度更快?

Which is faster for checking, sql/database query or file_get_content?

我有这种类型的数据,我称之为 ids

我有 8.6Mids 用于“有效性”检查。

tt9916820
tt9916822
tt9916824
tt9916826

我想知道哪个 更好更快

像这样使用 file_get_contents():

$imdbid = $_GET['id'];
if (strpos(file_get_contents("http://127.0.0.1/ids.txt"),$imdbid) !== false) {
    echo 'valid id';
} else {
    echo 'invalid id';
}

如果我应该只将所有 860 万个 ID 导入我的数据库并使用 sql 查询,如下所示:

$imdbid = $_GET['id'];
$existing = $wpdb->get_var("SELECT COUNT(*) from wp_postmeta where dbids='$imdbid'");
if ($existing) {
    echo 'valid id';
} else {
    echo 'invalid id';
}

哪个会更快?

我是新手,如果有任何更好的方法,请告诉我,因为我想了解更多。谢谢!

如果文件不经常更改,那么您应该将其导入 table 并在要搜索的列上创建索引。对索引列的查询应该快于:

  1. 正在通过网络获取 8MB(86MB?)的文件
  2. 正在将其全部加载到内存中(php 有内存限制)
  3. 使用 strpos 搜索它(只有在找到匹配项或到达字符串末尾时才会停止)
  4. 才发现要查找的值不存在

使用 suitable INDEX,数据库可以发现给定值是否在 table 内,并在几 毫秒内完成 .

搜索一个包含 860 万行的文件(在您的示例中可能是 86MB)将 ,甚至可能 分钟 。此外,您建议的代码需要空间来容纳在获取和搜索之间的整个 86MB。

而且,对于 strpos,如果 ID 的长度可变,您可能会得到虚假匹配。例如,搜索“tt9916822”将获得 3 次匹配,其中 none 次成功。数据库解决方案将阻止这种情况。

tt9916824
tt9916826
tt99168220
tt99168221
tt99168222