[分享]程式運作速度比較 - mission資料取得篇

WOG設定安裝教學

版主: 涅魂, 簫哥


涅魂
 
文章: 4463
註冊時間: 2004-01-04 11:17 am
來自: Taiwan
性別: 男生

[分享]程式運作速度比較 - mission資料取得篇

文章涅魂 » 2007-06-03 11:14 pm

最近突然想到mysql_num_rows()與mysql_data_seek()這兩個函式可以應用在mission中的一段程式碼上:
代碼: 選擇全部
      $m_total=$DB_site->query_first("select count(a.m_id) as m_id from wog_mission_main a LEFT JOIN wog_mission_book b ON  b.p_id=".$user_id." and a.m_id=b.m_id
            LEFT JOIN wog_mission_book c ON  c.p_id=".$user_id." and a.m_need_id=c.m_id and a.m_not_id<>c.m_id
            LEFT JOIN wog_mission_book d ON d.p_id=1 and a.m_not_id=d.m_id
            where  a.m_store_id=".$store_id." and (a.m_job=".$p["ch_id"]." or a.m_job=99) and a.m_lv <= ".$p["p_lv"]." and (a.m_sex=".$p["p_sex"]." or a.m_sex=3)
            and (m_birth is null or m_birth = ".$p["p_birth"].")
            and ((b.m_id is null and a.m_need_id=0) or (c.m_status=2 and b.m_id is null) ) and d.m_id is null");

      if(empty($_POST["page"]) || !is_numeric($_POST["page"]))
      {
         $_POST["page"]="1";
      }
      $spage=((int)$_POST["page"]*8)-8;

      $sql="select a.m_id,a.m_subject,a.m_name from wog_mission_main a LEFT JOIN wog_mission_book b ON  b.p_id=".$user_id." and a.m_id=b.m_id
            LEFT JOIN wog_mission_book c ON  c.p_id=".$user_id." and a.m_need_id=c.m_id and a.m_not_id<>c.m_id
            LEFT JOIN wog_mission_book d ON d.p_id=1 and a.m_not_id=d.m_id
            where  a.m_store_id=".$store_id." and (a.m_job=".$p["ch_id"]." or a.m_job=99) and a.m_lv <= ".$p["p_lv"]." and (a.m_sex=".$p["p_sex"]." or a.m_sex=3)
            and (m_birth is null or m_birth = ".$p["p_birth"].")
            and ((b.m_id is null and a.m_need_id=0) or (c.m_status=2 and b.m_id is null) ) and d.m_id is null LIMIT ".$spage.",8 ";

      $m=$DB_site->query($sql);

於是就拿來測試看看了XD
[hr]
程式一 寫:
代碼: 選擇全部
   $m_total=$DB_site->query_first("select count(m_id) as m_id from wog_mission_main where m_id < 40");
   $sql="select m_id,m_subject,m_name from wog_mission_main where m_id < 40 LIMIT 16,8";
   $m=$DB_site->query($sql);
   while($d=$DB_site->fetch_array($m))
   {
      
   }
   $DB_site->free_result($m);

程式二 寫:
代碼: 選擇全部
   $sql="select m_id,m_subject,m_name from wog_mission_main where m_id < 40";
   $m=$DB_site->query($sql);
   $m_total=$DB_site->num_rows($m);
   $DB_site->data_seek(16,$m);
   for($i=0;$i<8;$i++)
   {
      $d=$DB_site->fetch_array($m);
   }
   $DB_site->free_result($m);

運作結果 寫:
代碼: 選擇全部
總運作次數: 10 次.
總運作時間: 0.021013 秒.
[color=brown]Method 1[/color] 運作時間:0.011695 秒.
[color=olive]Method 2[/color] 運作時間:0.009278 秒.
[color=olive]Method 2[/color] 比 [color=brown]Method 1[/color] 快[color=blue] 26.050873032981 [/color]%

代碼: 選擇全部
總運作次數: 10 次.
總運作時間: 0.02069 秒.
[color=brown]Method 1[/color] 運作時間:0.011583 秒.
[color=olive]Method 2[/color] 運作時間:0.009069 秒.
[color=olive]Method 2[/color] 比 [color=brown]Method 1[/color] 快[color=blue] 27.72080714522 [/color]%

代碼: 選擇全部
總運作次數: 10 次.
總運作時間: 0.020636 秒.
[color=brown]Method 1[/color] 運作時間:0.01156 秒.
[color=olive]Method 2[/color] 運作時間:0.009037 秒.
[color=olive]Method 2[/color] 比 [color=brown]Method 1[/color] 快[color=blue] 27.918557043267 [/color]%

將m_id的範圍改為 < 100
代碼: 選擇全部
總運作次數: 10 次.
總運作時間: 0.024598 秒.
[color=brown]Method 1[/color] 運作時間:0.011941 秒.
[color=olive]Method 2[/color] 運作時間:0.012617 秒.
[color=brown]Method 1[/color] 比 [color=olive]Method 2[/color] 快[color=blue] 5.661167406415 [/color]%

代碼: 選擇全部
總運作次數: 10 次.
總運作時間: 0.025093 秒.
[color=brown]Method 1[/color] 運作時間:0.012339 秒.
[color=olive]Method 2[/color] 運作時間:0.012715 秒.
[color=brown]Method 1[/color] 比 [color=olive]Method 2[/color] 快[color=blue] 3.0472485614721 [/color]%

代碼: 選擇全部
總運作次數: 10 次.
總運作時間: 0.024936 秒.
[color=brown]Method 1[/color] 運作時間:0.011898 秒.
[color=olive]Method 2[/color] 運作時間:0.012999 秒.
[color=brown]Method 1[/color] 比 [color=olive]Method 2[/color] 快[color=blue] 9.2536560766517 [/color]%

從結果可以得知,取出的數量越少,method 2 的效率會比method 1 要來得高

且任務完成後即不會被取出,不常使用任務的玩家大多也不會經常開啟任務所

所以我認為 method 2 應該可以為程式帶來更好的效率

以上,供各位參考參考^^



回到 精華區

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 7 位訪客