สอบถามเรื่องการ query ข้อมูลออกมาจาก mysql ด้วย php ทำอย่างไรให้เร็วครับ
สร้าง index ให้กับฟิลด์ emp_id
ตารางผม หลักแสนเรคคอร์ด query แบบวน loop ไม่มีปัญหาครับ
Date :
2011-08-17 11:54:45
By :
avsqlz
คือผมไม่ใช่ admin ของ ฐานข้อมูลอะครับ ผมไม่มีสิทธิไปแก้ไขใดๆ select ออกมาได้อย่างเดียว
Date :
2011-08-17 14:01:43
By :
phoenekia
ลองศึกษาเรื่องการใช้ Temp table ครับ เผื่อช่วยได้
ประวัติการแก้ไข 2011-08-17 14:22:25
Date :
2011-08-17 14:20:59
By :
pumin99
1500+ นี่คือข้อมูลทั้งหมดในตาราง หรือว่าข้อมุลที่คุณต้อง select
แต่แค่นี้ไม่น่าจะช้านะ แล้วลองเช็คดีแล้วหรือครับว่าช้าที่ตรงนี้ อาจจะเป็นที่คิวรี่อื่นก็ได้
ลองใช้ IN แทน = ได้ปะแต่ต้องไป implode ตัวแปร emp_list ให้เป็นสตริงเพื่อมาสร้างเงื่อนไขใน WHRER
SELECT * FROM tbname WHERE emp_id IN ('01','02','03')
แต่ไม่ชัวร์นะครับมันต้องลองดูก่อนว่าระหว่าง ใช้ IN คิวรี่แค่ครั้งเดียว กับการใช้ =กับการคิวรี่หลายๆ อันไหนจะเร็วกว่า
ส่วนตัวผมถ้ามีข้อมูลเยอะจะเลี่ยงการใช้ IN
Date :
2011-08-17 15:33:52
By :
naskw
วนลูปประมาณกี่รอบครับ
Date :
2011-08-17 15:42:44
By :
avsqlz
1500ที่ว่าเป็นจำนวนโดยประมาณในการ select ออกมาครับไม่ใช่ข้อมูลทั้งหมดในตาราง
คือผมจะดึง email address ออกมาจาก DB ครับวน loop 1รอบก็ได้ออกมา 1 address ถ้าผมต้องการ 1500 address ก็ต้องวน 1500 รอบอะครับ ถ้าถามว่าทำไมไม่เอามันออกมาทีเดียวทั้ง 1500 ชื่อ เพราะมันขึ้นอยู่กับ user ว่าจะเลือกให้เอา address ไหนออกมาบ้าง วิธีที่ผมถามก็คือจะต่อ string ให้ sql มันยาวๆแต่จะได้ ส่ง sql ไปแค่ครั้งเดียว น่าจะเร็วกว่า ผมจึงมาถามว่าคนอื่นๆ ใช้วิธีไหนกันบ้างครับ
Date :
2011-08-18 09:23:23
By :
phoenekia
ถามต่อเลยนะครับ แล้วหลังจากดึงข้อมูลมาแล้ว ผมก็จะได้ email address มาส่ง email ออกไปด้วย phpmailer ซึ่งผมก็ต้องวน loop ส่งออักไปที่ละฉบับ ซึ่งทำให้ช้ามาก ใครพอจะมีวิธีให้ส่งได้เร็วขึ้นมั้ยครับ
Date :
2011-08-18 09:26:03
By :
phoenekia
ขอบคุณสำหรับคำตอบครับทุกท่าน
ก็จาก code
$sql ="SELECT gen_user.emp_id,gen_user.email_kh FROM ewt_user.gen_user WHERE gen_user.emp_id='$emp_list[$y]'";
คือให้เอา emp_id กับ email_kh ออกมาโดย WHERE gen_user.emp_id='$emp_list[$y]'
ซึ่งก็คือเอา รหัสพนักงานกับ email ออกมา โดยที่ รหัสพนักงาน = '$emp_list[$y]'
ผลลัพก็จะได้ e-mail address ออกมา 1 อัน ถ้าเป็นไปตามนี้ผมจะสามารถเอา e-mail ของพนักงาน 1500 คนซึ่งมีเมล์คนละอัน ออกมาได้ ก็ต้องวน loop 1500 รอบถูกมั้ยครับ ถ้าจะเอาออกมาที่ละ 50 เมล์ ก็ต้องแก้ sql ใหม่ ซึ่งผมก็อยากได้ แต่อยากรู้ว่าจะเขียนอย่างไรดี
ต่อมาส่งเมล์ทีละฉบับเพราะ ต้องการให้ผู้รับรู้สึกว่าเป็นการส่งแบบ 1-1 ไม่ใช่ 1 - n ครับถ้าใส่ address ลงไปทีละ50 ผู้รับก็จะเห็น address ของคนอื่นๆทั้งหมด ที่ header ซึ่งผมไม่ต้องการ
ปล.ผมคิดว่า การดึงข้อมูลออกมา 1500 ชื่อในที่เดียวมันไม่ช้าหรอกครับ เพราะลองดึงออกมาดูแล้วด้วย phpmyadmin มันจะช้าลงเพราะการวน loop ใน php และการส่ง เมล์ที่ละ ฉบับ มากกว่า
Date :
2011-08-18 13:38:11
By :
phoenekia
Load balance : Server 03