Tags:

พอดีไปอ่านเจอบทความนี้ครับ http://korakitinfo.com/hong/readarticle/91

ข้อ 18 ที่บอกว่า
ปิดการเชื่อมต่อกับ database เมื่อทำงานเสร็จทุกอย่าง
เพื่อให้เหลือ connection ว่างสำหรับรองรับการทำงานต่อไป และเป็นการคืน ทรัพยากรกลับเข้ามาด้วย

คืออยากจะทราบว่าถ้าในกรณีที่หน้าเพจของเราต้องทำการ SELECT อะไรหลายๆ อย่าง(SELECT เยอะขึ้นตาม Modules ที่อยู่ตาม Column ซ้ายขวาของเพจที่โหลดเข้ามา)

ถ้าเป็นตามที่ข้อ 18 บอกควรจะเขียนเป็น

mysql_connect()

mysql_query()

mysql_fetch_array()

mysql_close()

...

....

ไปเรื่อยๆ จนจบการทำงานของเพจ

หรือกับอีกแบบหนึ่งคือเปิด-ปิด mysql ครั้งเดียวไปเลย

mysql_connect()

mysql_query()

mysql_fetch_array()

mysql_query()

mysql_fetch_array()

..

....

.....

mysql_ close()

อย่างไหนจะทำงานได้ดีกว่ากันครับ
ขอคำชี้แนะด้วยครับ พอดีพึ่งจะเริ่มหัดเขียน php-mysql ให้เป็น libraries ตัวเล็กๆ ตัวหนึ่งไว้ใช้งาน

ปล. หรือว่าหันไปใช้ MySQLi กับ PDO ดีกว่าครับ

Get latest news from Blognone
By: adente
ContributorSUSESymbianWindows
on 21 November 2012 - 23:26 #509521
adente's picture

ผมว่าเปิด-ปิดครั้งเดียวน่าจะดีกว่านะ แล้วก็อะไรที่รวมเป็นคิวรีย์ครั้งเดียวได้ก็ควรรวมนะครับ

By: PiKO
ContributorAndroid
on 21 November 2012 - 23:58 #509536

อะไรที่ทำติดๆกัน ก็รวมกันไป เปิดปิดครั้งเดียว (ซึ่งส่วนใหญ่ PHP ผมมันก็ไม่ได้รออะไร ^^')


:: DigiKin8 ::

By: bongikairu
ContributoriPhone
on 22 November 2012 - 01:23 #509578

ถ้าในระหว่าง connect กับ close ไม่ได้ใช้เวลาในการคำนวณนานนัก ก็เปิดทิ้งไว้ก็ได้ครับ แต่ถ้ามีการคำนวณเยอะๆ ก็แยกเป็นหลายๆ กลุ่มก็ได้ แต่ไม่น่าจะถึงขั้น 1 connect 1 query

By: sugarcane
AndroidUbuntu
on 22 November 2012 - 01:39 #509588

จากในบทความ บอกว่าให้สั่งปิดคอนเนคชั่นทุกครั้งเมื่อทำงานเสร็จทุกอย่าง ในกรณีของเวบเพจโดยทั่วไปก็คือให้ปิดหลังจากคิวรี่สุดท้ายของเพจนั้นครับ

By: HamCNX
Windows
on 22 November 2012 - 09:55 #509661

ขอบคุณทุกคำแนะนำครับ ^^

By: itpcc
ContributoriPhoneRed HatUbuntu
on 22 November 2012 - 12:21 #509739
itpcc's picture

https://developers.google.com/speed/articles/optimizing-php
ลองอ่านดูครับ ^^


บล็อกส่วนตัวที่อัพเดตตามอารมณ์และความขยัน :P

By: EThaiZone
ContributorAndroidUbuntuWindows
on 22 November 2012 - 17:40 #509931
EThaiZone's picture

เป็นผมถ้าเปิดแล้วเปิดยาวเลย สำคัญว่าคือ!

  • ไม่เปิดอัตโนมัติ จะเปิดต่อเมื่อเกิด query แรกถึงค่อยเปิด
  • ก่อนจะให้เกิด query แรกถ้าแคชได้แคชก่อน ถ้ามีแคชก็ไม่จำเป็นต้อง query เลย

เรื่องนี้น่ากังวลยิ่งกว่าจะปิด connection ตอนไหนซะอีก


มันไม่ง่ายเลยที่จะทำ GIF ให้มีขนาดน้อยกว่า 20kB

By: lancaster
Contributor
on 22 November 2012 - 18:16 #509965

มันจะมีกรณีที่โปรแกรมเราต้องติดต่อข้อมูลจากภายนอก (เช่น คุยกับ Facebook API) ซึ่งมันจะเกิด delay time สูงมาก (อาจถึง 100 ms) ซึ่งถือว่าเป็นเวลาที่นานเกินรับได้ ดังนั้นควรจะปิด mysql ไปก่อนคุย แล้วค่อยเปิดใหม่เมื่อจะใช้อีกครั้งหลังจากคุยกับ Facebook API เสร็จครับ

By: EThaiZone
ContributorAndroidUbuntuWindows
on 22 November 2012 - 20:29 #510046 Reply to:509965
EThaiZone's picture

อันนี้เห็นด้วยครับ สรุปมัน per case เลยแฮะ


มันไม่ง่ายเลยที่จะทำ GIF ให้มีขนาดน้อยกว่า 20kB

By: gogogokrit on 25 November 2012 - 12:24 #510947

ถ้าไม่กังวลเรื่อง Query Performance มาก (เขียน Query ได้ดีเร็ว Optimize ไว้แล้ว) ถ้ามันเยอะมากจริงๆ แนะนำให้สร้างเป็น Function ไว้ที่เดียวเลยครับ แล้วเรียกเป็น library เอาจะสะดวกกว่า
ตัวอย่างเช่น dbconnector.php

$dbname;
$addr;
function connectMysql($query,$dbname,$addr)    
{
  ตรงนี้แนะนำให้ตรวจสอบ query ทุกครั้งเพื่อป้องกัน SQL injection

  mysql_connect()
  mysql_query()
  $output = mysql_fetch_array()
  mysql_close()

return $output
}

แล้วเรียกผ่าน function ที่เราสร้างขึ้น (วิธีนี้มีข้อเสียที่จะแตก process connection ออกเป็นจำนวนมาก แต่ผมคิดว่า query ที่นานที่สุดคงไม่เกิน 1 วินาทีละมั้ง ถ้าไม่นับแบบดึง record มาแสดงทั้งหมดที่ต้องทำ Full table scan)

By: lojorider
AndroidUbuntuWindowsIn Love
on 16 January 2013 - 04:02 #529685

ไม่จำเป็นต้อง close ครับถ้าเป็นไปตาม
http://www.unzeen.com/article/1092/

By: bencomtech
AndroidUbuntuWindows
on 28 February 2015 - 15:48 #795274

ถ้าถามเรื่อง performance ก็เปลี่ยนไปใช้ mysqli หรือ PDO ดีกว่าครับ หลีกเลี่ยงการ injection ครับ