ฉันต้องเขียนแบบสอบถามเพื่อดึงรายการรหัสขนาดใหญ่
เรารองรับแบ็กเอนด์จำนวนมาก (MySQL, Firebird, SQLServer, Oracle, PostgreSQL ... ) ดังนั้นฉันต้องเขียน SQL มาตรฐาน
ขนาดของชุด id อาจมีขนาดใหญ่แบบสอบถามจะถูกสร้างขึ้นโดยทางโปรแกรม ดังนั้นวิธีที่ดีที่สุดคืออะไร?
1) การเขียนแบบสอบถามโดยใช้ IN
SELECT * FROM TABLE WHERE ID IN (id1, id2, ..., idn)
คำถามของฉันที่นี่คือ จะเกิดอะไรขึ้นถ้า n ใหญ่มาก? นอกจากนี้สิ่งที่เกี่ยวกับประสิทธิภาพ?
2) การเขียนแบบสอบถามโดยใช้ OR
SELECT * FROM TABLE WHERE ID = id1 OR ID = id2 OR ... OR ID = idn
ฉันคิดว่าวิธีการนี้ไม่มีขีด จำกัด n แต่จะเกี่ยวกับประสิทธิภาพหาก n มีขนาดใหญ่มาก
3) การเขียนวิธีแก้ปัญหาแบบเป็นโปรแกรม:
foreach (var id in myIdList)
{
var item = GetItemByQuery("SELECT * FROM TABLE WHERE ID = " + id);
myObjectList.Add(item);
}
เราประสบปัญหาบางอย่างกับวิธีการนี้เมื่อเซิร์ฟเวอร์ฐานข้อมูลถูกสอบถามผ่านเครือข่าย โดยปกติแล้วจะดีกว่าหากทำแบบสอบถามหนึ่งรายการที่ดึงผลลัพธ์ทั้งหมดเมื่อเทียบกับสร้างแบบสอบถามจำนวนน้อย บางทีฉันผิด
อะไรจะเป็นทางออกที่ถูกต้องสำหรับปัญหานี้
IN
! ฉันทำของฉันเป็นวิธีแก้ปัญหาของคุณ 1 + 3 เพียงแค่แบบสอบถามสุดท้ายเป็นหนึ่งสตริงแบบสอบถามยาวส่งไปยัง SQL เพื่อดำเนินการ