ประสิทธิภาพของ Select - SQL

   
สงสัยในประสิทธิภาพของ SQL กรณีที่มีข้อมูลจำนวนมากที่ต้องคัดเลือก record เฉพาะช่วง เช่น มี order ลูกค้าทุกวันทั้งปี ถ้าเราต้องการ select เฉพาะ order 15/08/2004 - 23/08/2004 ไม่ทราบว่า SQL มันจะไปหาข้อมูลตั้งแต่ต้น file เลยหรือไม่ (คล้ายคำสั่ง locate ใน foxpro dos) ซึ่งถ้าเป็นอย่างนั้นคงช้ามาก แต่ถ้าเขียนด้วย fox DOS เราสามารถใช้ index ช่วยได้ เช่น seek ข้อมูล 15/08/2004 แล้วใช้ do while วันที่>=15/08/2004 .and. วันที่<=23/08/2004 ทำให้โปรแกรมจัดการข้อมูลเฉพาะที่ต้องการได้
วีรนาจ
5 ม.ค. 48 เวลา 13:53:42 น. --> 202.133.154.104
   
   
ลองดูสิครับ
-----------------------------
do while วันที่>=15/08/2004 .and. วันที่<=23/08/2004

VS

select * from table where between(วันที่,15/08/2004,23/08/2004)
--------------------

หมายเหตุ วันที่อย่าลืมแปลงจาก Char ให้เป็น Date ก่อนนะครับ CTOD()
tong
5 ม.ค. 48 เวลา 14:26:04 น. --> 203.157.14.245,
  
   
ถ้าใช้ foxpro2 for DOS ขึ้นไป ตั้งแต่รุ่นนี้เป็นต้นมาก็มี Rushmore Technology มาแล้ว ก็คือๆ กับที่คุณใช้ seek ่ก่อน ที่จะ loop แหละ ถ้าใช้คำสั่ง SQL มันจะกระโดดไปหาในตำแหน่งที่มีเลย

จำไว้ว่าคุณสั่ง seek ยังไง สร้าง index แบบไหน ใน sql ก็ใส่เงื่อนไขให้เหมือนกัน เช่น
INDEX ON DTOS(fielddate) TAG tagname
จะเห็นว่าเราทำ index โดยใช้ function DTOS แปลงวันที่มาเป็นสตริงค์ ในรูปแบบ yyyymmdd เวลาใช้ sql ก็ต้อง แปลงให้เหมือนกันด้วย ถ้าไม่เหมือนหรือผิดไปเล็กน้อย ก็ไม่ไวหรอก แต่ถ้าเหมือนรับรองไม่ช้า

SELECT * FROM tablename WHERE BETWEEN(DTOS(fielddate),DTOS(DATE(2004,08,15)),DTOS(DATE(2004,08,23))

เกษม
5 ม.ค. 48 เวลา 14:38:51 น. --> 61.90.192.22, w
  
   
ขอบคุณ อ.เกษม มากครับ รบกวนถามอีกนิดว่า ถ้า tablename มีหลาย index ก่อนจะใช้ select นั้น ผมสามารถเลือก index ที่ต้องการได้หรือไม่ เช่น
select tablename
set orde to tag index1
select * from tablename where <เงื่อนไขตาม index file>
ไม่ทราบว่าอย่างนี้ถูกต้องไหมครับ
วีรนาจ
5 ม.ค. 48 เวลา 16:15:28 น. --> 202.133.155.63,
  
   
ไม่ต้อง set order ครับ sql มันรู้เอง
ย้ำอีกรอบ ถ้า index หลายๆฟิลด์ เงื่อนไข ก็ต้องเหมือนกัน มันถึงจะไว
เช่น มี index ที่ทำไว้
INDEX ON field1 + field2 + field3 TAG tagname

เวลาใส่ในเงื่อนไขใน where ก็ต้องรวมด้วยน่ะ
SELECT * FROM ..... WHERE field1 + field2 + field3 = ตัวแปร1 + ตัวแปร2 + ตัวแปร3

ปล. ถ้าคุณมี คำสั่ง sql แล้วมีเงื่อนไขที่หลายๆแบบ คุณไม่ต้องไปสร้าง index ให้มันหมดทุกอันล่ะ เอาสร้าง index เฉพาะที่ๆจำเป็นต้องสร้างก็พอ
เกษม
5 ม.ค. 48 เวลา 16:54:35 น. --> 61.90.192.22, w
  
   
ขอบคุณอีกครั้งครับอาจารย์
วีรนาจ
5 ม.ค. 48 เวลา 20:01:43 น. --> 202.133.155.63,
  
ขอเชิญร่วมตอบคำถามครับ
 
ผู้ตอบ :
รหัสผ่าน :
รูปภาพ :
คำตอบ :