php – 从数据库中检索数据的最有效算法
发布时间:2020-12-13 16:46:40 所属栏目:PHP教程 来源:网络整理
导读:因此,当我准备转移到不支持此功能的Cassandra时,我正在从查询中删除联接,而是支持许多select语句.我在我的 mysql表(我目前正在使用的)中对50行数据进行了基准测试,结果是101个查询(全部选择),完成所有这些查询需要大约0.035秒.然后我将其更改为一些数组操作(
因此,当我准备转移到不支持此功能的Cassandra时,我正在从查询中删除联接,而是支持许多select语句.我在我的
mysql表(我目前正在使用的)中对50行数据进行了基准测试,结果是101个查询(全部选择),完成所有这些查询需要大约0.035秒.然后我将其更改为一些数组操作(目前在
PHP中)并将其减少为3个查询,其中包含一堆O(n)for循环.
我假设我的系统是在PHP,Python,MySQL还是Cassandra(NoSQL)上,使用一些O(n)for循环而不是更多的查询处理数据的速度更快,我减少了时间使用这种新方法0.035s到0.004s,如下所示. 是否有其他方法可以缩短此范围?还是我走在正确的轨道上?在任何情况下运行所有??查询的速度都会更快(除非它变为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',$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 解决方法
使用Cassandra,您可以使用multi get在一个查询中询问所有键,这比一堆单个查询要快得多.我有时会在查询中询问数千个密钥,响应时间实际上是即时的.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |