我有這種型別的資料,我稱之為 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';
}
或者如果我應該將所有 8.6M ids 匯入我的資料庫并使用這樣的 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';
}
哪個會更快?
我是新手,如果有任何更好的方法可以做到這一點,請讓我知道,因為我想了解更多。謝謝!
uj5u.com熱心網友回復:
使用合適INDEX的 ,資料庫可以發現給定值是否在表中,并在幾毫秒內完成。
搜索包含 860 萬行的檔案(在您的示例中可能為 86MB)將幾秒鐘,甚至幾分鐘。此外,您建議的代碼在獲取和搜索之間需要空間來容納整個 86MB。
并且,strpos如果 id 是可變長度的,則可能會得到虛假匹配。例如,搜索“tt9916822”將獲得 3 次命中,但均未成功。資料庫解決方案將防止這種情況發生。
tt9916824
tt9916826
tt99168220
tt99168221
tt99168222
uj5u.com熱心網友回復:
如果檔案不經常更改,則應將其匯入表并在要搜索的列上創建索引。對索引列的查詢應該比:
- 通過網路獲取 8MB(86MB?)檔案
- 將所有內容加載到記憶體中(php有記憶體限制)
- 使用搜索它
strpos(僅在找到匹配項或到達字串末尾時才停止) - 才發現被搜索的值不存在
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/417208.html
標籤:
