ฉันแค่ต้องยืนยันว่าฉันเข้าใจบางอย่างถูกต้อง:
ฉันเพิ่งดูคำถาม SO ที่ผู้ใช้โพสต์คำตอบใน Linq เช่น:
from p in db.table where p.column.AddMinutes(1) > DateTime.Now select p
สำหรับผู้ที่ไม่คุ้นเคยกับ Linq ฉันคาดหวังว่าผลลัพธ์ของคำแถลงนั้น (ไม่ได้ทดสอบอย่างยุติธรรม) จะเป็น:
SELECT *
FROM table t
WHERE DATEADD(min, 1, t.column) >= GETDATE()
ฉันโพสต์คำตอบนี้บอกว่าการจัดการ datetime ควรจะอยู่ในตัวแปร (ในกรณีนี้GETDATE()
) ดังนั้นในความเป็นจริงคำสั่งควรสะท้อนถึงสิ่งที่ชอบ:
SELECT *
FROM table t
WHERE t.column >= DATEADD(min, -1, GETDATE())
ในการตอบกลับของฉันบิตที่ฉันไม่แน่ใจตอนนี้ถือว่าต่อไปนี้:
- ดัชนีจะไม่ถูกใช้เนื่องจากการจัดการคอลัมน์
- แผนแบบสอบถามจะแตกต่างกันบางส่วนเนื่องจากการข้างต้น
- เนื่องจากการข้างต้นการสืบค้นที่ 1 จะทำงานได้แย่กว่าการสืบค้นที่ 2
คำถามของฉัน:
ฉันพลาดอะไรไปบ้างในการให้เหตุผลของฉัน? ฉันถูกไหม? สุดท้ายร่างกายใดมีบทความที่ดีเกี่ยวกับ SARGability?