[SQL] 어떻게 순수한 SQL에 LINQ의 .Skip (1000) .Take (100)을 작성하려면 어떻게해야합니까?
SQL어떻게 순수한 SQL에 LINQ의 .Skip (1000) .Take (100)을 작성하려면 어떻게해야합니까?
LINQ의 .Skip () 메소드의 SQL 상응하는 무엇입니까?
예를 들면 : 나는 특정 데이터베이스 테이블에서 행 1000-1100을 선택하고 싶습니다.
이것은 단지 SQL과 수 있습니까? 아니면 다음, 전체 테이블을 선택하여 메모리에 행을 찾을 필요합니까? 나는 가능하면 테이블이 매우 클 수 있기 때문에,이를 방지하기 위해 같은 이상적 것입니다.
해결법
-
==============================
1.SQL Server 2005에서는 이상 당신은 ROW_NUMBER 기능을 사용할 수 있습니다. 예를 들면.
SQL Server 2005에서는 이상 당신은 ROW_NUMBER 기능을 사용할 수 있습니다. 예를 들면.
USE AdventureWorks; GO WITH OrderedOrders AS ( SELECT SalesOrderID, OrderDate, ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber' FROM Sales.SalesOrderHeader ) SELECT * FROM OrderedOrders WHERE RowNumber BETWEEN 51 AND 60; --BETWEEN is inclusive
-
==============================
2.SQL 서버 2012 위의 구문을 추가했습니다 :
SQL 서버 2012 위의 구문을 추가했습니다 :
SELECT * FROM Sales.SalesOrderHeader ORDER BY OrderDate OFFSET (@Skip) ROWS FETCH NEXT (@Take) ROWS ONLY
-
==============================
3.SQL에 LINQ는 ROW_NUMBER의 윈도우 기능을 사용하여이 작업을 수행합니다 :
SQL에 LINQ는 ROW_NUMBER의 윈도우 기능을 사용하여이 작업을 수행합니다 :
SELECT a,b,c FROM (SELECT a,b,c, ROW_NUMBER() OVER (ORDER BY ...) as row_number FROM Table) t0 WHERE to.row_number BETWEEN 1000 and 1100;
이 작품,하지만 쿼리에 발생할 수 ORDER BY에서 ROW_NUMBER을 제조 할 필요는 서버 측과 원인 성능 문제에 분류된다. 인덱스 요구 사항에 의해 순서를 만족시킬 수있는 경우에도 쿼리는 여전히 결과를 반환 startting 전에 1000 개 행을 계산한다. 모든 너무 자주 개발자는이를 잊고 단지 첫 번째 페이지가 너무 빨리 지난 것보다 반환하는 이유 5 백만 행 테이블과 경이를 통해 매김 제어를 던져 ...
없음 덜, ROW_NUMBER를 사용하여 ()가 아마 사용의 용이성과 좋은 성능 사이에서 최적의 균형입니다, 당신은 당신이 정렬 (조건 BY 주문이 인덱스에 의해 만족스러운 될 수있다)을 피할 수 있도록 제공했다.
-
==============================
4.이거 한번 해봐:
이거 한번 해봐:
select * from [Table-Name] order by [Column-Name] offset [Skip-Count] rows FETCH NEXT [Take-Count] rows only
예:
select * from Personals order by Id offset 10 rows --------->Skip 10 FETCH NEXT 15 rows only --------->Take 15
-
==============================
5.이 작업을 수행:
이 작업을 수행:
는 SQL 출력에서 SQL의 데이터 컨텍스트와 모양에 LINQ에 실행 .Skip (1000) .Take (100). 그것은 당신이 설명하는지 않는 당신을위한 SQL 문을 생성합니다.
그것은 우아한으로하지 않습니다하지만 일을 가져옵니다.
-
==============================
6.아니,하지만 당신은 동일한 결과를 달성하기 위해 MySQL의 LIMIT 절 (유래 링크)를 시뮬레이션 할 수 있습니다.
아니,하지만 당신은 동일한 결과를 달성하기 위해 MySQL의 LIMIT 절 (유래 링크)를 시뮬레이션 할 수 있습니다.
from https://stackoverflow.com/questions/1744802/how-do-i-write-linqs-skip1000-take100-in-pure-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] T-SQL에서 정렬 된 테이블에서 행 M부터 N 행을 얻는 방법 (0) | 2020.05.08 |
---|---|
[SQL] SQL은 : 첫 글자를 대문자 만 [중복] (0) | 2020.05.08 |
[SQL] SQL 쿼리는 최소값과 별개의 행을 선택합니다 (0) | 2020.05.07 |
[SQL] IF NOT SQLite는 존재 할 방법 (0) | 2020.05.07 |
[SQL] 어떻게 현재 날짜의 소인이있는 행을 선택하려면? (0) | 2020.05.07 |