SQLiteからデータを呼び出す場合
1.まとめて呼び出して処理しながら配列に入れる
2.その都度必要なデータを呼び出して処理する
どっちの方が早いのかなと
まあ、大量データを扱うなら、PHPで配列操作するよりsqlで個々に呼び出した方が早い気がする
という事で
呼び出し1
<?php try { //db接続 $db = new PDO('sqlite:log/boardlog.db' ); //ページ数 $p=0; //1ページの記事数 $page_def = 20; //現在ページの記事範囲 $page_r = $p * $page_def ; //ページおわり $page_e = $page_r + $page_def ; //計測開始 $start = microtime(true); //100回繰り返す for($i = 0; $i < 100; $i++) { //dql呼び出し文 $sql = "select * from oekakibbs where invz == 0 order by parent asc, tree desc, id asc"; //メインデータ変数 $dat = array(); //データ分割 foreach ($db->query($sql) as $data) { //親データ取得 $parent = $data['parent']; //ページおわり if($parent > $page_e){ break;} //現在ページ迄処理を飛ばす if ($parent == 0 ){ $comm_res[] = $data ; continue; } if ($parent <= $page_r ){continue ;} //親データ格納 $dat['oya'][] = $data ; //親記事番号 $oya = $parent -1; //子データ格納 foreach ($comm_res as $res) { if($res['tree'] != $data['tree']){continue;} $dat['oya'][$oya][] = $res ; } } } $end = microtime(true); echo "処理時間:" . ($end - $start) . "秒"; //db切断 $db = null; } catch (PDOException $e) { echo "<p>エラー:", $e->getMessage(), "</p>"; }
約5.3病でした
その2
<?php try { //db接続 $db = new PDO('sqlite:log/boardlog.db' ); //ページ数 $p=0; //1ページの記事数 $page_def = 20; //現在ページの記事範囲 $page_r = $p * $page_def ; //ページおわり $page_e = $page_r + $page_def ; //計測開始 $start = microtime(true); for($i = 0; $i < 100; $i++) { //dql呼び出し文 $sql = "select * from oekakibbs where invz == 0 and parent > 0 order by parent asc"; //メインデータ変数 $dat = array(); //データ分割 foreach ($db->query($sql) as $data) { //親データ取得 $parent = $data['parent']; //ページおわり if($parent > $page_e){ break;} //現在ページ迄処理を飛ばす if ($parent <= $page_r ){continue ;} $dat['oya'][] = $data ; //親記事 $oya = $parent -1; $tree_res = $data['tree']; $sql2 = "select * from oekakibbs where invz == 0 and tree == $tree_res order by id desc"; foreach ($db->query($sql2) as $res) { $dat['oya'][$oya][] = $res ; } } } $end = microtime(true); echo "処理時間:" . ($end - $start) . "秒"; //db切断 $db = null; } catch (PDOException $e) { echo "<p>エラー:", $e->getMessage(), "</p>"; }
約0.4秒!!
全然違うね〜
やっぱり毎度sqlで呼び出した方が早い
よく考えたらwhere で parent > 開始NO and parent <=終了no とした方が早いか