ฉันมีการวัดโลกสองชุดจากข้อมูลดาวเทียมแต่ละชุดมีเขตเวลา (mjd สำหรับค่าจูเลียนเฉลี่ย) และตำแหน่งทางภูมิศาสตร์ (GeoPoint, spacial) และฉันกำลังมองหาความบังเอิญระหว่างสองชุดดังกล่าวซึ่งเวลาของพวกเขาตรงกับเกณฑ์ของ 3 ชั่วโมง (หรือ .125 วัน) และระยะทางของพวกเขาภายใน 200 กม. ของกันและกัน
ฉันสร้างดัชนีสำหรับทั้งฟิลด์ mjd บนทั้งตารางและตารางเชิงพื้นที่
เมื่อฉันเพิ่งเข้าร่วมในข้อ จำกัด เวลาฐานข้อมูลจะคำนวณการแข่งขัน 100,000 ครั้งใน 8 วินาทีและคำนวณระยะทางสำหรับการแข่งขันทั้งหมด 100,000 ครั้งในเวลานั้น แบบสอบถามมีลักษณะดังนี้:
select top 100000 h.Time, m.Time, h.GeoPoint.STDistance(m.GeoPoint)/1000.0
from L2V5.dbo.header h join L2.dbo.MLS_Header m
on h.mjd between m.mjd-.125 and m.mjd+.125
option( table hint ( h, index(ix_MJD) ), table hint( m, index(ix_MJD) ) )
และแผนดำเนินการคือ:
เมื่อเรียงลำดับแล้ว 9 จากระยะทางอยู่ต่ำกว่า 200 กม. ดังนั้นจึงมีการแข่งขัน ปัญหาคือเมื่อฉันเพิ่มข้อ จำกัด ระยะทางและรันสิ่งนี้แทน
select top 10 h.Time, m.Time, h.GeoPoint.STDistance(m.GeoPoint)/1000.0
from L2V5.dbo.header h join L2.dbo.MLS_Header m
on h.mjd between m.mjd-.125 and m.mjd+.125
and h.GeoPoint.STDistance(m.GeoPoint)<200000
option( table hint ( h, index(ix_MJD) ), table hint( m, index(ix_MJD) ) )
มันหายไปเป็นเวลานาน เห็นได้ชัดว่าใน 8 วินาทีสามารถค้นหาการแข่งขันได้ 100,000 ครั้งโดย 9 ในนั้นอยู่ต่ำกว่า 200 กมดังนั้นเครื่องมือเพิ่มประสิทธิภาพจะต้องพยายามทำบางสิ่งที่ดีที่สุด แผนมีลักษณะคล้ายกับด้านบนพร้อมตัวกรองสำหรับระยะทาง (ฉันคาดเดา)
ฉันสามารถบังคับใช้ดัชนีอวกาศด้วยสิ่งนี้:
select top 5 h.Time, m.Time, h.GeoPoint.STDistance(m.GeoPoint)/1000.0
from L2V5.dbo.header h join L2.dbo.MLS_Header m
on h.GeoPoint.STDistance(m.GeoPoint)<200000
and h.mjd between m.mjd-.125 and m.mjd+.125
option( table hint ( h, index(ix_MJD), index(ix_GeoPoint) ), table hint( m, index(ix_MJD) ) )
ซึ่งจะใช้เวลา 3 นาทีในการค้นหา 5 แมทช์
ฉันจะบอกให้เคียวรีเครื่องมือเพิ่มประสิทธิภาพใช้ดัชนี MJD ค้นหาก่อนจากนั้นดัชนีปริภูมิที่สอง (หรือคือสิ่งที่ทำไปแล้ว) และมีวิธีใดที่ฉันสามารถช่วยได้ หากสามารถคำนวณการแข่งขัน 100,000 นัดด้วยระยะทางใน 8 วินาทีที่มี 9 ใต้ 200 กม. การเพิ่มดัชนีอวกาศไม่ควรทำให้เร็วขึ้นหรือไม่ช้าลง?
ขอบคุณสำหรับเคล็ดลับหรือความคิดเห็นอื่น ๆ
แก้ไข: เพื่อตอบคำถามว่าแผนดูเหมือนอย่างไรโดยไม่มีคำแนะนำนี้ (และมันต้องใช้ตลอดไป):
นอกจากนี้ยังอาจกล่าวถึงว่ามีเกือบ 1 ล้านระเบียนในตารางหนึ่งและอีก 8 ล้านบันทึก