我使用這個select語句將讀取數據庫(MySQL的)記錄的名字:有沒有更好的方法來訪問數百個不同的數據庫記錄?
select * from table where name = 'xxx'
但我有數百個在一個HTTP請求的名字,所以如果我使用上面的語句,我要發出數百個選擇。或者我只是使用MySQL select .. in
來減少sql調用。
但它仍然太慢。那麼,有沒有更好的方法來達到我的目的?提前致謝!
我使用這個select語句將讀取數據庫(MySQL的)記錄的名字:有沒有更好的方法來訪問數百個不同的數據庫記錄?
select * from table where name = 'xxx'
但我有數百個在一個HTTP請求的名字,所以如果我使用上面的語句,我要發出數百個選擇。或者我只是使用MySQL select .. in
來減少sql調用。
但它仍然太慢。那麼,有沒有更好的方法來達到我的目的?提前致謝!
第一件事你應該有索引'名稱',如果你在哪裏使用條件。如果你有更多的條件,試圖找出更多的列可以有索引。
第二件事使用IN查詢它將解決您的數據庫調用最小化。
select * from table where name IN ('xxx', 'syz', 'abc',....);
謝謝!在我看來,沒有更好的辦法。 – jiluo
我想如果你把所有的名字分成塊,然後在select語句中使用這些塊,你的問題就會被修復。可以說
$names = array($n1,$n2...);
$totalnames = count($totalnames);
$chunksize = 50;
$totalChunks = ceil($totalnames/$chunksize);
for($i=0;$i<$totalChunks;$i++)
{
$j = $chunksize*$i;
for($k=$j;$k<=$j;$k++)
{
select statement with in
}
}
太慢?確保你的數據庫有一個適當的'name'列的索引,並且讓它爲你做好工作。 – jweyrich
@jweyrich我的意思是我必須在一個http請求處理中發出數百個sql,因此是否使用帶索引的列不是關鍵點。 – jiluo
你爲什麼不嘗試與WHERE ... IN進行通話? – Perception