sql/database 查询或 file_get_content 哪个检查速度更快?
Which is faster for checking, sql/database query or file_get_content?
我有这种类型的数据,我称之为 ids
我有 8.6M 个 ids
用于“有效性”检查。
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 并在要搜索的列上创建索引。对索引列的查询应该多快于:
- 正在通过网络获取 8MB(86MB?)的文件
- 正在将其全部加载到内存中(php 有内存限制)
- 使用
strpos
搜索它(只有在找到匹配项或到达字符串末尾时才会停止)
- 才发现要查找的值不存在
使用 suitable INDEX
,数据库可以发现给定值是否在 table 内,并在几 毫秒内完成 .
搜索一个包含 860 万行的文件(在您的示例中可能是 86MB)将 秒 ,甚至可能 分钟 。此外,您建议的代码需要空间来容纳在获取和搜索之间的整个 86MB。
而且,对于 strpos
,如果 ID 的长度可变,您可能会得到虚假匹配。例如,搜索“tt9916822”将获得 3 次匹配,其中 none 次成功。数据库解决方案将阻止这种情况。
tt9916824
tt9916826
tt99168220
tt99168221
tt99168222
我有这种类型的数据,我称之为 ids
我有 8.6M 个 ids
用于“有效性”检查。
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 并在要搜索的列上创建索引。对索引列的查询应该多快于:
- 正在通过网络获取 8MB(86MB?)的文件
- 正在将其全部加载到内存中(php 有内存限制)
- 使用
strpos
搜索它(只有在找到匹配项或到达字符串末尾时才会停止) - 才发现要查找的值不存在
使用 suitable INDEX
,数据库可以发现给定值是否在 table 内,并在几 毫秒内完成 .
搜索一个包含 860 万行的文件(在您的示例中可能是 86MB)将 秒 ,甚至可能 分钟 。此外,您建议的代码需要空间来容纳在获取和搜索之间的整个 86MB。
而且,对于 strpos
,如果 ID 的长度可变,您可能会得到虚假匹配。例如,搜索“tt9916822”将获得 3 次匹配,其中 none 次成功。数据库解决方案将阻止这种情况。
tt9916824
tt9916826
tt99168220
tt99168221
tt99168222