สอบถามเรื่อง Sql ครับ

เริ่มโดย Lunifer, 02 ตุลาคม 2012, 12:29:25

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

Lunifer

สมมติว่า ผมมี 4 ตาราง 1.tv 2.radio 3.laptop 4.tablet
select * from ตาราง order by RAND() limit จำนวนที่อยากได้

มันมีวิธีที่ผมจะเขียน random ที่เดียว 4 ตาราง เลยมัยครับโดยใช้โค้ด sql แค่บรรทัดเดียว

aekarach

เขียนแบบหลายบรรทัดแต่ Statement เดียว


select * from (
  select * from tv
 
  union all
 
  select * from radio
 
  union all
 
  select * from laptop
 
  union all
 
  select * from tablet
) Order by RAND();


อันนี้เขียนแบบบรรทัดเดียวแต่ Statement เดียว


select * from (select * from tv union all select * from radio union all select * from laptop union all select * from tablet) Order by RAND();


ปล.ไม่แน่ใจ Syntax ถูกต้องหรือเปล่า แต่ที่แน่ๆ ออกแบบ Database แบบนี้ถือว่าไม่ผ่าน
[direct=http://www.datasite.co.th/domain.php] Domain .com .net 450 บาท[/direct][direct=http://www.datasite.co.th/hosting.php] Hosting 100MB 1,200 บาท/ปี สำรองข้อมูล 365 วัน[/direct]
[direct=http://www.datasite.co.th/vps.php] Window VPS/ Linux VPS เดือนละ 1,500 บาท [/direct]
[direct=http://www.datasite.co.th/colocation.php] ฝากเซิร์ฟเวอร์ทรูเมืองทองธานี เดือนละ 3,500 บาท มี KVM on the NET [/direct]
บริษัท ดาต้าไซต์ จำกัด โทร 02-686-1226 (จ-ศ 8.30-17.30)สายด่วน 081-423-2838 ตลอด 24 ชั่วโมง

Lunifer

#2
ขอบคุณครับเดี๋ยวเอาไปลองดูก่อน เพราะมันเป็นก้อนเดียวกัน สินค้าเป็นหมื่น เวลาดึงจากโฮส เปิดเว็บช้ามากเกิน 6 วิ ผมเลยลองแยกดูว่าจะ คิวรี่หน้าเว็บเร็วขึ้นมัย
1 ตารางรวมทุกอย่างหลายหมื่น
กับหลายตารางแยกเก็บ table เป็นชนิดสินค้า

ที่บอกว่าไม่ผ่านรบกวนแนะนำด้วยครับมีวิธีไหนดีกว่านี้มัยครับ  :wanwan017:

aekarach

ระหว่าง Table Master Product กับ Table Transaction Production ควรแยกจากกัน

ใน Transaction refer กับ Master ด้วย Primary Key เช่น ProductID ก็เพียงพอแล้ว เพื่อประหยัดเนื้อที่และความเร็วในการ Query
และถูกต้องตามหลัก Database Normalization


ต่อให้เซิร์ฟเวอร์แพงแค่ไหน แต่ถ้าออกแบบไว้ไม่ดี เซิร์ฟเวอร์ก็ทำงานได้ไม่ดีเช่นกัน

อยากเห็นคนไทยออกแบบดาต้าเบสเก่งๆ เอาใจช่วยครับ
[direct=http://www.datasite.co.th/domain.php] Domain .com .net 450 บาท[/direct][direct=http://www.datasite.co.th/hosting.php] Hosting 100MB 1,200 บาท/ปี สำรองข้อมูล 365 วัน[/direct]
[direct=http://www.datasite.co.th/vps.php] Window VPS/ Linux VPS เดือนละ 1,500 บาท [/direct]
[direct=http://www.datasite.co.th/colocation.php] ฝากเซิร์ฟเวอร์ทรูเมืองทองธานี เดือนละ 3,500 บาท มี KVM on the NET [/direct]
บริษัท ดาต้าไซต์ จำกัด โทร 02-686-1226 (จ-ศ 8.30-17.30)สายด่วน 081-423-2838 ตลอด 24 ชั่วโมง

Lunifer

Normalization
เป็นสคิปที่ต้องดึงข้อมูลพวก รูปภาพ/ราคา/รายละเอียด/ดาว มาแสดง
ถ้าผม แยกอีก ตามหลักที่เรียนมาช่วง มหาลัย มันจะทำให้เร้วขึ้นหรอครับ
เพราะถ้า มาถึง แรนดอมไป ก็ดึง ID ไปก่อน เพื่อที่จะมาดึง ข้อมูลที่แยกไว้อีกตาราง
เร็วขึ้นเยอะมัยครับ เพราะลองแล้วไม่ได้ผล ความช้ายังเท่าเดิม กลายเป้น ดึงดาต้า 2 ครั้งอีก

mikeyx

Normalization ถ้าข้อมูลไม่เยอะไม่เกินหลักแสน record ก็เร็วดีครับเวลาเรียกใช้ข้อมูลแต่ถ้าเยอะกว่านั้นต้องมานั่งแก้กันใหม่ให้เร็วยิ่งขึ้นด้วยการแคชที่ดาต้าเบสกับ file อีกรอบ

Lunifer

ผมเขียนสคริปทำอเมซอนครับ คิดว่าเกิน 100000 สินค้าแน่ๆ ขอบคุณครับ +1 ทั้ง 2 ท่านปล่อยตกเลยครับ

icez

ไอ้ random นี่แหละครับตัวทำให้ช้า ไม่ว่าจะแยกหรือไม่แยก เพราะมันต้อง scan ทั้งตาราง แล้วเรียงลำดับใหม่ (แบบสุ่ม)

ยิ่งถ้าเอามารวมกันอีกนี่ยิ่งหนักครับ ...


ถ้าเป็นไปได้ เลิกใช้เถอะครับ
[direct=http://www.thzhost.com/]THZHost[/direct] SSD Hosting ไทย/สิงคโปร์ พร้อม firewall ป้องกันการยิงเว็บ + scan ไวรัสในเว็บ

aekarach

อ้างถึงจาก: Lunifer ใน 02 ตุลาคม 2012, 13:02:59
ผมเขียนสคริปทำอเมซอนครับ คิดว่าเกิน 100000 สินค้าแน่ๆ ขอบคุณครับ +1 ทั้ง 2 ท่านปล่อยตกเลยครับ

แล้วแต่เทคนิคนะครับ ตรงนี้มันเป็นเรื่องเทคในการเขียนโปรแกรม สิ่งสำคัญในการพัฒนาโปรแกรม ลองดูว่าเครื่องมือที่เราใช้นั้นสามารถทำอะไรได้บ้าง เราก็นำ Feature ตรงนี้แหละครับไปช่วยในการพัฒนา
[direct=http://www.datasite.co.th/domain.php] Domain .com .net 450 บาท[/direct][direct=http://www.datasite.co.th/hosting.php] Hosting 100MB 1,200 บาท/ปี สำรองข้อมูล 365 วัน[/direct]
[direct=http://www.datasite.co.th/vps.php] Window VPS/ Linux VPS เดือนละ 1,500 บาท [/direct]
[direct=http://www.datasite.co.th/colocation.php] ฝากเซิร์ฟเวอร์ทรูเมืองทองธานี เดือนละ 3,500 บาท มี KVM on the NET [/direct]
บริษัท ดาต้าไซต์ จำกัด โทร 02-686-1226 (จ-ศ 8.30-17.30)สายด่วน 081-423-2838 ตลอด 24 ชั่วโมง

goweb

อ้างถึงจาก: icez ใน 02 ตุลาคม 2012, 13:06:25
ไอ้ random นี่แหละครับตัวทำให้ช้า ไม่ว่าจะแยกหรือไม่แยก เพราะมันต้อง scan ทั้งตาราง แล้วเรียงลำดับใหม่ (แบบสุ่ม)

ยิ่งถ้าเอามารวมกันอีกนี่ยิ่งหนักครับ ...


ถ้าเป็นไปได้ เลิกใช้เถอะครับ
เห็นด้วยเป็นอย่างยิ่ง ^ ^
ถ้าทำอะไรดีแล้ว คนมองว่าสร้างภาพ ก็ช่างเขา
อย่างน้อยเราก็ได้ทำดี ไม่เหมือนเขาที่แค่คิดดี
ยังไม่ได้ทำเลย... พระมหาวุฒิชัย (ว.วชิรเมธี)
สาธุ..

tctheworld

หลายๆท่านก็ตอบไปแล้ว

ส่วนผมขอแนะนำการเิ่พิ่มความเร็วนะครับ

1.set index ในฐานข้อมูลที่เป็น unique
2.ให้ทำการ random ตัวเลขขึ้นมาชุดนึง แล้วค่อยมาทำ query โดยใช้ where id IN ($ran2, $ran3, $ran4, $ran5, $ran6, $ran7)
เพราะการใช้ order RAND() กับข้อมูลจำนวนมากจะมีผลทำให้ช้า

เลยตัดมาใช้แบบนี้รับรองเร็วขึ้นแน่ครับ