そのため、これをサポートしていないが、代わりに多くのselectステートメントをサポートしているCassandraに移動する準備をしているときに、クエリから結合を削除しています。mysqlテーブル(現在使用しているもの)の50行のデータでベンチマークテストを行った結果、101個のクエリ(すべて選択)が発生し、これらのクエリをすべて完了するのに約0.035秒かかりました。次に、これをいくつかの配列操作(現在はPHP)に変更し、これを3つのクエリに減らしてループのO(n)をまとめました。
私のシステムがPHP、Python、MySQL、またはCassandra(NoSQL)のいずれであるかにかかわらず、多くのクエリよりもいくつかのO(n)forループを使用してデータを処理する方がはるかに高速であると思います。以下に示すように、この新しい方法を使用すると、0.035秒から0.004秒になります。
これをさらに短縮するための代替方法はありますか?それとも私は正しい方向に進んでいますか?すべてのクエリを実行する方が速い場合(O(n ^ 2)になる場合を除く)?ありがとう:
// Now go through and get all of the user information (This is slower in mysql, but maybe faster in cassandra)
/*foreach ($results as $key => $row)
{
// Create query
$query = DB::select('id', 'username', 'profile_picture')->from('users')->where('id', '=', $row['uid']);
// Execute it
$results2 = $query->execute(null, false);
// Join it
$data[$key] = array_merge($row, $results2[0]);
}*/
// Get all the user information (faster in mysql since less queries)
$uids = array();
$ids = array();
foreach ($results as $key => $row)
{
if (!in_array($row['uid'], $uids))
$uids[] = $row['uid'];
if (!in_array($type, array('userProfile')))
$ids[] = $row['comment_id'];
}
// Create query
$query = DB::select('id', 'username', 'profile_picture')->from('users')->where('id', '=', $uids);
// Execute it
$results2 = $query->execute(null, false);
$user_data = array();
foreach ($results2 as $key => $row)
{
$user_data[$row['id']] = array('uid' => $row['id'], 'username' => $row['username'], 'profile_picture' => $row['profile_picture']);
}
foreach ($results as $key => $row)
{
$data[$key] = array_merge($row, $user_data[$row['uid']]);
}
// End faster user info section