ทำยังไงให้เวลาค้นหาข้อมูลมันเร็วขึ้นได้ ทำยังไงให้เวลาค้นหาข้อมูลมันเร็วขึ้นได้มั่งครับ
ข้อมูลเยอะเกิน 100,000 Record แล้วอาจจะต้องทำใจหน่อยครับ ว่าอาจจะทำให้ Query ช้า แน่นอนครับ ถ้าลองดูพวก Keys หรือ Index แล้วถ้ายังไม่เร็วขึ้นอีก ก็อาจจะกลับไปดูเรื่องการเขียน Query และออกแบบ Table ครับ หรือถ้าข้อมูลเยอะมาก อาจจะลองแยกเป็นหลาย ๆ Table แล้วใช้การ UNION กันครับ
Date :
2009-02-27 15:24:06
By :
webmaster
1. การออกแบบฐานข้อมูล
2. การจัดทำอินเด็กซ์
3. กระบวนการทำงานของโปรเซสระบบ
4. คำสั่งในการคิวรี่ฐานข้อมูล ผลเหมือนกัน เขียนได้หลายแบบ แน่นอนว่าความเร็วในการทำงานก้ต้องต่างกัน
5. อุกรณ์และฮาร์ดแวร์ของเซิฟเวอร์
6. การปรับแต่งซอฟแวร์ของเซิฟเวอร์
ข้อมูล 2 แสนแถว ผมว่ามันยังไม่เยอะเท่าไหร่นะคับ
Date :
2009-02-27 15:24:40
By :
zankumuro
ตอนแรก ผม ยังไม่ได้รวม ตาราง เข้าด้วยกัน มันปาไปเกือบ 2 นาทีครับ ซึ่ง ที่มัน แยกตารางกันอยู่ ประมาณ 4 ตารางครับซึ่งจะเก็บเป็นรหัส เทียบเหมือน เป็น ตารางเปรีบเทียบรหัส 1 หลัก เท่านั้นครับ คราวนี้ผมเลยลอง สร้างฟิลด์เพิ่มไปแล้ว ก็สั่ง replace เข้าไป ในตารางหลักเลย มันถึงเหลือแค่ 2 ตารางครับ ซึ่งใช้เวลา 1 นาทีพอดี ครับ ไม่ทราบว่ามีวิ๊อะไรให้มันเร็วขึ้นกว่านี้ไหมครับ
คือว่าตารางข้อมูลพวกนี้ปกติ จะเป็น back up ที่นำออกมาจาก ไฟล์ dbf ครับ แล้วถึงนำมา insert เข้า mysql เพราะว่าข้อมูลชุดนี้เป็นตัวสำหรับ ออนเว็บ ส่วน dbf ใช้เฉพาะ ภายในครับ เลยเข้าไปแก้ไข โครงส้รางของ ฐานข้อมูลไม่ได้ครับ แต่เราจะมา ปรับเอาใน mysql เฉยๆครับ แต่ยังต้องอ้างอิงกับ ฐานข้อมูลหลักอยู่ครับ
Date :
2009-02-27 15:41:23
By :
tro
ผมเองก้ไม่รูจะแนะนำยังไงนะคับ เพราะของผมหลายแสนเหมือนกัน คาดว่าเดือนหน้าหลักล้านแน่นอน ตอนนี้ก็ประสบปัญหาเรียกว่าอืดพอสมควร
ของผมจะทำเป็นแบบนี้คับ คือ จะแยกข้อมูลออกเป้นตารางๆ เช่น
table_data_1, table_data_2, table_data_3 เป้นต้น
เวลาจะแสดงข้อมูลผมก็เอามา UNION กันเหมือนที่MR.WINบอก
ตอนนี้ผมลองใช้แบบ if...else เช็คดูในแต่ละตารางก่อน ยังไม่รุ้ว่าวิธ๊ไหนจะดีกว่ากัน แต่ แบบ UNION น่าจะดีกว่า
อ่อและตอนที่คิวรี่รวมออกมา ผมเลือกเฉพาะฟิลด์ที่จะต้องใช้คับ พยายามหลีกเลี่ยง SELECT * เพราะของผม ยังไงหน้าแสดงรายละเอียดมันก้อีกหน้า เลยส่งแค่ค่าไอดีไป แล้วค่อยคิวรี่ออกมาอีกทีดีกว่า
Date :
2009-02-27 16:10:00
By :
zankumuro
ใช้ mysql ทำงานเยอะที่สุด ให้คืนค่า result set กลับมาน้อยที่สุดเท่าที่จำเป็น
ปล. ข้อมูลระดับ 200,000 จำเป็นต้องปรับ memory_limit ด้วยสินะ ปรับไปเท่าไหร่คับ
psp อยากเห็น query จัง
Date :
2009-02-27 19:27:40
By :
pjgunner
คือว่า ตอนแสดงข้อมูลไม่เยอะครับ แต่มันจะเป็น ลักษณะ count ฟิลด์ที่ ตรงกับเงื่อนไข ลองนึกถึง ข้อมูลมี 200,000 กว่าๆ แต่เวลานับ เฉพาะ ทีเป็นของ ปี2551 แล้วแยกเป็นประเภท เช่น หน่วยงานหลัก หน่วยงานย่อย จำนวน บุคคล แยกเป็นประเภท ต่างๆ ประมาณนี้ครับ
ซึ่งเวลาที่แสดงจริงๆแล้ว จะไม่ถึงหลักแสน แต่แค่ พันกว่าๆครับ
หลังจากที่ได้รับคำแนะนำจากทุกคน ผมเลยลองไปสำรวจ index ไหม่ ตอนนี้จากที่จับเวลา เหลือประมาณ 20 วิแล้วครับ แต่ลองเช็คที่ เครื่อง server แล้ว cpu กินไป 50%แล้วลองเช้าไปดึงข้อมูลพร้อมกัน 2 เครือง เล่นใช้เวลาไป 1 นาทีกว่าๆครับ ดูแล้ว mysql กิน cpu มากเลยครับ กลัวมันจะแฮ้งครับ มีวิธีไหนช่วยได้มั่งครับ เอาแบบ กิน cpu น้อยลง และเร็วขึ้นครับ
Date :
2009-02-27 19:58:32
By :
tro
แยก mysql ไปไว้อีกเครื่องก็ดีครับ งิงิ
แต่ข้อมูลจำเป็นต้องเป็นปัจจุบันเสมอป่าวคับ
มีข้อมูลเพิ่มตลอดเวลาป่าวคับ
ถ้าไม่จำเป็น ลองสร้าง แคช ไว้ดีกว่านะครับ วันละ 1-5 ครั้ง ก็อาจ จะลดการทำงานได้ครับ
Date :
2009-02-27 20:42:59
By :
pjgunner
ถ้าไม่กี่พัน เรคคอร์ด สร้าง แคชไว้ เวลามีข้อมูลเพิ่ม ก็เพิ่มเข้าไปในแคชด้วยครับ เวลาลบ ก็ลบจากแคชด้วยครับ
แล้วก็ดึงจากแคชเอา
Date :
2009-02-27 20:45:14
By :
pjgunner
คือว่า สร้างบังไงครับ ผมมือไหมครับ รบกวนด้วยครับ
Date :
2009-02-28 09:13:28
By :
tro
คุณก็ระบุคีย์เวอร์ด สำหรับที่คุณแคชไว้ด้วยครับ ว่าเป็นคีย์เวิดอะไร ถ้าไม่ตรงก็ให้ค้นหา แล้ว แคช เพิ่มเป็นคีย์เวิร์ดอันใหม่
Date :
2009-02-28 18:40:22
By :
pjgunner
Load balance : Server 05