Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > PHP > PHP Forum > ทำยังไงให้เวลาค้นหาข้อมูลมันเร็วขึ้นได้ ทำยังไงให้เวลาค้นหาข้อมูลมันเร็วขึ้นได้มั่งครับ



 

ทำยังไงให้เวลาค้นหาข้อมูลมันเร็วขึ้นได้ ทำยังไงให้เวลาค้นหาข้อมูลมันเร็วขึ้นได้มั่งครับ

 



Topic : 025048

Guest




ทำยังไงให้เวลาค้นหาข้อมูลมันเร็วขึ้นได้มั่งครับ
คือผม ทำเป็นตัวสรุปรายงาน ประมาณว่าให้นับแถวเอา ซึ่ง ในตารางจะมีข้อมูลประมาณ 200,000 record เวลาที่มันทำการประมวลผลทีใช้เวลาไป ประมาณ 1 นาทีพอดี
ซึ่งผมได้สราง index ไว้แล้ว
ซึ่งในรายงานที่ให้สรุปข้อมูล จะมี ฟิลด์ที่ใช้ค้นหาอยู่ประมาณ 4 เงื่อนไข เช่น 1. ปี 2.สถานะ 3.หน่วยงาน 4.หน่วยงานย่อย
และจะมีการ เชื่อมโยง กันอยู่ 2 ตาราง ซึ่งอีกตารางมีอยู่ ประมาณ 40,000 record

ปกติแล้วถ้าข้อมูลเยอะขนาดนี้ มันจะต้องช้าแบบนี้ใหมครับ



Tag : - - - -







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2009-02-27 15:17:01 By : tro View : 4952 Reply : 12
 

 

No. 1



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ข้อมูลเยอะเกิน 100,000 Record แล้วอาจจะต้องทำใจหน่อยครับ ว่าอาจจะทำให้ Query ช้า แน่นอนครับ ถ้าลองดูพวก Keys หรือ Index แล้วถ้ายังไม่เร็วขึ้นอีก ก็อาจจะกลับไปดูเรื่องการเขียน Query และออกแบบ Table ครับ หรือถ้าข้อมูลเยอะมาก อาจจะลองแยกเป็นหลาย ๆ Table แล้วใช้การ UNION กันครับ






Date : 2009-02-27 15:24:06 By : webmaster
 


 

No. 2



โพสกระทู้ ( 355 )
บทความ ( 0 )



สถานะออฟไลน์


1. การออกแบบฐานข้อมูล
2. การจัดทำอินเด็กซ์
3. กระบวนการทำงานของโปรเซสระบบ
4. คำสั่งในการคิวรี่ฐานข้อมูล ผลเหมือนกัน เขียนได้หลายแบบ แน่นอนว่าความเร็วในการทำงานก้ต้องต่างกัน
5. อุกรณ์และฮาร์ดแวร์ของเซิฟเวอร์
6. การปรับแต่งซอฟแวร์ของเซิฟเวอร์

ข้อมูล 2 แสนแถว ผมว่ามันยังไม่เยอะเท่าไหร่นะคับ
Date : 2009-02-27 15:24:40 By : zankumuro
 

 

No. 3

Guest


ตอนแรก ผม ยังไม่ได้รวม ตาราง เข้าด้วยกัน มันปาไปเกือบ 2 นาทีครับ ซึ่ง ที่มัน แยกตารางกันอยู่ ประมาณ 4 ตารางครับซึ่งจะเก็บเป็นรหัส เทียบเหมือน เป็น ตารางเปรีบเทียบรหัส 1 หลัก เท่านั้นครับ คราวนี้ผมเลยลอง สร้างฟิลด์เพิ่มไปแล้ว ก็สั่ง replace เข้าไป ในตารางหลักเลย มันถึงเหลือแค่ 2 ตารางครับ ซึ่งใช้เวลา 1 นาทีพอดี ครับ ไม่ทราบว่ามีวิ๊อะไรให้มันเร็วขึ้นกว่านี้ไหมครับ
คือว่าตารางข้อมูลพวกนี้ปกติ จะเป็น back up ที่นำออกมาจาก ไฟล์ dbf ครับ แล้วถึงนำมา insert เข้า mysql เพราะว่าข้อมูลชุดนี้เป็นตัวสำหรับ ออนเว็บ ส่วน dbf ใช้เฉพาะ ภายในครับ เลยเข้าไปแก้ไข โครงส้รางของ ฐานข้อมูลไม่ได้ครับ แต่เราจะมา ปรับเอาใน mysql เฉยๆครับ แต่ยังต้องอ้างอิงกับ ฐานข้อมูลหลักอยู่ครับ
Date : 2009-02-27 15:41:23 By : tro
 


 

No. 4



โพสกระทู้ ( 355 )
บทความ ( 0 )



สถานะออฟไลน์


ผมเองก้ไม่รูจะแนะนำยังไงนะคับ เพราะของผมหลายแสนเหมือนกัน คาดว่าเดือนหน้าหลักล้านแน่นอน ตอนนี้ก็ประสบปัญหาเรียกว่าอืดพอสมควร

ของผมจะทำเป็นแบบนี้คับ คือ จะแยกข้อมูลออกเป้นตารางๆ เช่น

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
 


 

No. 5



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

ใช้ mysql ทำงานเยอะที่สุด ให้คืนค่า result set กลับมาน้อยที่สุดเท่าที่จำเป็น

ปล. ข้อมูลระดับ 200,000 จำเป็นต้องปรับ memory_limit ด้วยสินะ ปรับไปเท่าไหร่คับ
psp อยากเห็น query จัง
Date : 2009-02-27 19:27:40 By : pjgunner
 


 

No. 6

Guest


คือว่า ตอนแสดงข้อมูลไม่เยอะครับ แต่มันจะเป็น ลักษณะ count ฟิลด์ที่ ตรงกับเงื่อนไข ลองนึกถึง ข้อมูลมี 200,000 กว่าๆ แต่เวลานับ เฉพาะ ทีเป็นของ ปี2551 แล้วแยกเป็นประเภท เช่น หน่วยงานหลัก หน่วยงานย่อย จำนวน บุคคล แยกเป็นประเภท ต่างๆ ประมาณนี้ครับ
ซึ่งเวลาที่แสดงจริงๆแล้ว จะไม่ถึงหลักแสน แต่แค่ พันกว่าๆครับ

หลังจากที่ได้รับคำแนะนำจากทุกคน ผมเลยลองไปสำรวจ index ไหม่ ตอนนี้จากที่จับเวลา เหลือประมาณ 20 วิแล้วครับ แต่ลองเช็คที่ เครื่อง server แล้ว cpu กินไป 50%แล้วลองเช้าไปดึงข้อมูลพร้อมกัน 2 เครือง เล่นใช้เวลาไป 1 นาทีกว่าๆครับ ดูแล้ว mysql กิน cpu มากเลยครับ กลัวมันจะแฮ้งครับ มีวิธีไหนช่วยได้มั่งครับ เอาแบบ กิน cpu น้อยลง และเร็วขึ้นครับ
Date : 2009-02-27 19:58:32 By : tro
 


 

No. 7

Guest


ที่ผม ใส่ตอนค้นหาแบบนี้ ครับ
Code (PHP)
<?php
select (fild1+fild2+fild3+fild4+fild5)
?>
คล้ายๆ ทำเป็น index ผมไม่แนใจว่าถูกหรือไม่ครับบ ส่วนที่เป็น ตัวตาราง ผมก็ทำ index ไว้แล้วครับ แต่ผมทำใน โค้ดอีกครั้ง ไม่รู้ว่าจะช่วยได้หาเปล่า แต่ลองแล้ว มันไวขึ้นประมาณ 3-5 วินาทีครับ
Date : 2009-02-27 20:04:42 By : tro
 


 

No. 8



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

แยก mysql ไปไว้อีกเครื่องก็ดีครับ งิงิ

แต่ข้อมูลจำเป็นต้องเป็นปัจจุบันเสมอป่าวคับ

มีข้อมูลเพิ่มตลอดเวลาป่าวคับ


ถ้าไม่จำเป็น ลองสร้าง แคช ไว้ดีกว่านะครับ วันละ 1-5 ครั้ง ก็อาจ จะลดการทำงานได้ครับ
Date : 2009-02-27 20:42:59 By : pjgunner
 


 

No. 9



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

ถ้าไม่กี่พัน เรคคอร์ด สร้าง แคชไว้ เวลามีข้อมูลเพิ่ม ก็เพิ่มเข้าไปในแคชด้วยครับ เวลาลบ ก็ลบจากแคชด้วยครับ

แล้วก็ดึงจากแคชเอา
Date : 2009-02-27 20:45:14 By : pjgunner
 


 

No. 10



โพสกระทู้ ( 41 )
บทความ ( 0 )



สถานะออฟไลน์


คือว่า สร้างบังไงครับ ผมมือไหมครับ รบกวนด้วยครับ
Date : 2009-02-28 09:13:28 By : tro
 


 

No. 11



โพสกระทู้ ( 41 )
บทความ ( 0 )



สถานะออฟไลน์


หลังจากทดลองสร้าง cache แล้ว มันมีอาการแบบนี้ครับ

คือ ปกติเวลาค้นหาข้อมูล เช่น ปี 51 เมื่อค้นหาเสร็จ มันจะเก็น แคช ไว้ ถ้ามีคนมาเปิดต่อมันก็จะดึงมาได้เลย

แต่ กลายเป็นว่า ตอนนี้ ถ้าผมใส่ พศ อื่น เช่น 50 ไป มันกลับมาแสดงอยู่ที่หน้า ของ พศ 51 ตลอดเลยครับ ไม่ทราบว่ามีปัญหาตรงไหนครับ

ลองดูโค้ดครับ
Code (PHP)
<?php

//Configuration
$cache_time = 60*2; //second
$cache_file = "cache/".md5($_SERVER['REQUEST_URL']);

if(file_exists($cache_file)) {
if((time()-filemtime($cache_file)) < $cache_time) {
$cache_data = file_get_contents($cache_file);
if (!(strlen($cache_data) < 18 || strcmp(substr($cache_data,0,2),"\x1f\x8b"))) header( 'Content-Encoding: gzip' );
echo $cache_data;
die();
}
}

ob_start(); // start the output buffer
?>
.................................. โค้ดแสดงข้อมูล

<?php
$ob_buffer = ob_get_contents();
ob_end_flush(); // Send the output to the browser

$fp = fopen($cache_file, 'w'); // open the cache file "cache/home.html" for writing
fwrite($fp, $ob_buffer); // save the contents of output buffer to the file
fclose($fp); // close the file
?>

Date : 2009-02-28 13:18:08 By : tro
 


 

No. 12



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

คุณก็ระบุคีย์เวอร์ด สำหรับที่คุณแคชไว้ด้วยครับ ว่าเป็นคีย์เวิดอะไร ถ้าไม่ตรงก็ให้ค้นหา แล้ว แคช เพิ่มเป็นคีย์เวิร์ดอันใหม่
Date : 2009-02-28 18:40:22 By : pjgunner
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ทำยังไงให้เวลาค้นหาข้อมูลมันเร็วขึ้นได้ ทำยังไงให้เวลาค้นหาข้อมูลมันเร็วขึ้นได้มั่งครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่