วันศุกร์ที่ 4 กรกฎาคม พ.ศ. 2557

Developer Tip #Paging With SQL

ใครๆก็จะมีปัญหาเกี่ยวกับการ Query จำนวนแถวมากๆ มักเป็นปัญหาเสมอๆเพราะข้อมูลมันเยอะถ้าแค่ 5-10 แถวมันยังไม่มากแต่ล่อไปสัก 10000 แถวชักเริ่มปัญหาเกิดขึ้น เวลา Query ทั้งหมด
วันนี้ผมไปเจอมาเกี่ยวกับการทำ Paging สำหรับ SQL Server 2008 และ 2012 ครับ
ลองไปดูกันนะครับ
--VIEWING THE PAGE "2" WITH 5 ROWS
DECLARE @PageNumber AS INT, @RowspPage AS INTSET @PageNumber = 2SET @RowspPage = 5
SELECT * FROM (             SELECT ROW_NUMBER() OVER(ORDER BY ID_EXAMPLE) AS NUMBER,                    ID_EXAMPLE, NM_EXAMPLE, DT_CREATE FROM TB_EXAMPLE               ) AS TBLWHERE NUMBER BETWEEN ((@PageNumber - 1) * @RowspPage + 1) AND (@PageNumber * @RowspPage)ORDER BY ID_EXAMPLE

Query ข้างต้นสำหรับ SQL Server ที่ไม่ใช่ 2012 นะครับ (แต่ 2012 ก็ใช้ได้นะครับ)
แต่สำหรับเวอร์ชั่น 2012 จะมีเพิ่มขึ้นมาทำให้ง่ายขึ้นนิดหน่อยครับ
--CREATING A PAGING WITH OFFSET and FETCH clauses IN "SQL SERVER 2012"
DECLARE @PageNumber AS INT, @RowspPage AS INTSET @PageNumber = 2SET @RowspPage = 10 
SELECT ID_EXAMPLE, NM_EXAMPLE, DT_CREATEFROM TB_EXAMPLEORDER BY ID_EXAMPLEOFFSET ((@PageNumber - 1) * @RowspPage) ROWSFETCH NEXT @RowspPage ROWS ONLY;

สำหรับ Version 2012 ได้มี Offset เข้ามาทำให้การทำงานง่ายขึ้นอีกขั้นนึง และยังได้ประสิทธิภาพที่ดีกว่าการใช้ ROW_NUMBER อีกด้วย สามารถดูเพิ่มเติมได้ที่นี่ครับ
http://social.technet.microsoft.com/wiki/contents/articles/23811.paging-a-query-with-sql-server.aspx

ขอบคุณ
http://social.technet.microsoft.com/wiki/contents/articles/23811.paging-a-query-with-sql-server.aspx
ครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น