ความแตกต่างของประสิทธิภาพระหว่าง ORM ที่มีคารมคมคายของ Laravel และการสืบค้น SQL ดิบมีความสำคัญและก้านส่วนใหญ่มาจากสิ่งที่เป็นนามธรรมและค่าใช้จ่ายในการประมวลผลในการพูดคุยเมื่อเทียบกับการดำเนินการโดยตรงของ SQL ดิบ
ค่าใช้จ่ายด้านประสิทธิภาพใน Orm ที่มีคารมคมคาย
ELOQUENT ให้เลเยอร์การทำแผนที่ความสัมพันธ์เชิงวัตถุที่แปลบันทึกฐานข้อมูลลงในวัตถุ PHP สิ่งที่เป็นนามธรรมนี้เพิ่มความสะดวกและความสามารถในการอ่าน แต่แนะนำค่าใช้จ่ายด้านประสิทธิภาพหลายประการ:
- CPU ที่เพิ่มขึ้นและการใช้งานหน่วยความจำ: มีคารมคมคายวัตถุสำหรับบันทึกฐานข้อมูลแต่ละรายการที่ดึงมาหรือจัดการซึ่งใช้ทรัพยากรหน่วยความจำและ CPU มากกว่า SQL ดิบที่ทำงานโดยตรงกับแถวข้อมูลโดยไม่ต้องแปลงวัตถุ [3] [6]
- เวลาดำเนินการช้าลง: เนื่องจากการประมวลผลเพิ่มเติมการสืบค้นที่มีคารมคมคายมักใช้เวลานานกว่าในการดำเนินการ โดยเฉพาะอย่างยิ่งที่เด่นชัดในการดำเนินงานจำนวนมากเช่นการแทรกหรืออัปเดตบันทึกหลายพันรายการซึ่งค่าใช้จ่ายของผู้มีคารมคมคายสะสมอย่างมีนัยสำคัญ [3] [6]
- การสร้างแบบสอบถามที่ซับซ้อน: สำหรับการดำเนินการที่เกี่ยวข้องกับการเข้าร่วมตารางหลายตารางมักจะสร้างแบบสอบถาม SQL หลายตัวหรือการสืบค้นที่ซับซ้อนซึ่งได้รับการปรับให้เหมาะสมน้อยกว่าการสืบค้น SQL RAW ที่สร้างขึ้นอย่างดี สิ่งนี้นำไปสู่เวลาดำเนินการที่ยาวนานขึ้นในการดำเนินการที่เลือกด้วยการเข้าร่วมหลายครั้ง [3]
ข้อดีของ SQL ดิบ
แบบสอบถาม SQL RAW บายพาสเลเยอร์ ORM ส่งคำสั่ง SQL โดยตรงไปยังฐานข้อมูล ผลลัพธ์นี้ใน:
- การดำเนินการที่เร็วขึ้น: แบบสอบถาม SQL RAW ทำงานได้เร็วขึ้นเพราะพวกเขาหลีกเลี่ยงค่าใช้จ่ายของการสร้างวัตถุและเลเยอร์การแปล การทดสอบประสิทธิภาพแสดงให้เห็นว่า SQL RAW มีประสิทธิภาพสูงกว่าการมีคารมคมคายในการแทรกอัปเดตและเลือกการดำเนินการโดยมีความแตกต่างของเวลาเพิ่มขึ้นเมื่อปริมาณข้อมูลหรือความซับซ้อนของการสืบค้นเพิ่มขึ้น [3] [6]
- ดีกว่าสำหรับการดำเนินงานที่ซับซ้อนและซับซ้อน: SQL RAW นั้นมีประสิทธิภาพมากขึ้นสำหรับการแทรก/การอัปเดตจำนวนมากและการสืบค้นที่ซับซ้อนที่เกี่ยวข้องกับการรวมหลายครั้งเนื่องจากช่วยให้สามารถควบคุมโครงสร้างการสืบค้นได้อย่างแม่นยำ [3] [6]
เมื่อใดควรใช้แต่ละ
- ORM ที่มีคารมคมคาย: เหมาะที่สุดสำหรับแอปพลิเคชันขนาดเล็กถึงขนาดกลางด้วยการดำเนินการ CRUD ที่ค่อนข้างง่ายและชุดข้อมูลขนาดเล็ก ช่วยเพิ่มประสิทธิภาพการทำงานของนักพัฒนาซอฟต์แวร์การอ่านรหัสความสามารถในการบำรุงรักษาและคุณสมบัติด้านความปลอดภัยทำให้เหมาะอย่างยิ่งเมื่อประสิทธิภาพดิบไม่สำคัญ [3] [6]
- RAW SQL: ต้องการสำหรับแอพพลิเคชั่นที่สำคัญต่อประสิทธิภาพที่เกี่ยวข้องกับข้อมูลจำนวนมากการดำเนินการจำนวนมากหรือการสืบค้นที่ซับซ้อนซึ่งความเร็วในการดำเนินการเป็นสิ่งสำคัญยิ่ง RAW SQL ให้การควบคุมและประสิทธิภาพมากขึ้นในสถานการณ์เหล่านี้ [3] [6]
สรุป
ในขณะที่ ORM ที่มีคารมคมคายนำเสนอสิ่งอำนวยความสะดวกในการพัฒนาที่สำคัญ แต่ก็มีการลงโทษประสิทธิภาพที่วัดได้เมื่อเทียบกับการสืบค้น SQL แบบดิบ ความแตกต่างนั้นโดดเด่นที่สุดในการดำเนินการข้อมูลขนาดใหญ่และการสืบค้นที่ซับซ้อน RAW SQL ดำเนินการได้เร็วขึ้นและใช้ทรัพยากรน้อยลง แต่ต้องใช้การจัดการแบบสอบถามด้วยตนเองมากขึ้น การเลือกระหว่างพวกเขาขึ้นอยู่กับข้อกำหนดด้านประสิทธิภาพของแอปพลิเคชันและลำดับความสำคัญของการพัฒนา [3] [6]
การอ้างอิง:
[1] https://www.reddit.com/r/laravel/comments/hezv6m/eloquent_vs_query_builder_vs_sql_performance_test/
[2] https://laravel.io/forum/04-23-2014-eloquent-vs-raw-sql- ซึ่งเป็น-reallly-better
[3] https://www.diva-portal.org/smash/get/diva2:1014983/FullText02
[4] https://stackoverflow.com/questions/14570568/speed-comparison-between-eloquent-orm-query-builder-and-raw-sql-queries
[5] https://www.youtube.com/watch?v=N_RBSOJFCAU
[6] https://blog.livares.com/comparison-of-performance-between-eloquent-and-raw-query/
[7] https://dev.to/hesamrad/laravel-orm-vs-query-builder-vs-sql-speed-test-4knf
[8] https://stackoverflow.com/questions/38391710/ what-are-the-key-differences-between-laravels-eloquent-orm-and-query-builder