복붙노트

[SQL] 무한 행 오프셋 MYSQL

SQL

무한 행 오프셋 MYSQL

나는 그러나 테이블에 표시 모든 결과는, 테이블의 시작부터 (5)에 의해 상쇄되는 쿼리를 구성하고 싶습니다. 지금까지 내가 말할 수있는, MySQL은의 LIMIT는 오프셋뿐만 아니라 제한이 필요합니다. 이 작업을 수행 할 수있는 방법이 있습니까?

해결법

  1. ==============================

    1.LIMIT에 MySQL의 매뉴얼에서 :

    LIMIT에 MySQL의 매뉴얼에서 :

    SELECT * FROM tbl LIMIT 95, 18446744073709551615;
    
  2. ==============================

    2.당신이 그것을 언급 한 바와 같이 당신이 18,446,744,073,709,551,615 (서명되지 않은 BIGINT의 최대)이다 가능한 가장 큰 제한을 사용해야하므로 제한이 필요하다

    당신이 그것을 언급 한 바와 같이 당신이 18,446,744,073,709,551,615 (서명되지 않은 BIGINT의 최대)이다 가능한 가장 큰 제한을 사용해야하므로 제한이 필요하다

    SELECT * FROM somewhere LIMIT 18446744073709551610 OFFSET 5
    
  3. ==============================

    3.다른 답변에서 언급 한 바와 같이, MySQL은 제한의 레코드 수로 18,446,744,073,709,551,615를 사용하여 제안하지만,이 사항을 고려하십시오 다시 18,446,744,073,709,551,615 기록을 가지고 있다면 당신은 무엇을 할 것인가? 당신은 1,000,000,000 기록을 가지고 있다면 사실, 당신은 무엇을 할 것인가?

    다른 답변에서 언급 한 바와 같이, MySQL은 제한의 레코드 수로 18,446,744,073,709,551,615를 사용하여 제안하지만,이 사항을 고려하십시오 다시 18,446,744,073,709,551,615 기록을 가지고 있다면 당신은 무엇을 할 것인가? 당신은 1,000,000,000 기록을 가지고 있다면 사실, 당신은 무엇을 할 것인가?

    아마 당신은 억이 개 넘는 기록을 싶지 않지만, 내 지점이 당신이 원하는 수에 일부 제한이며, 미만 18 quintillion 것입니다. 안정성, 최적화, 그리고 아마도 유용성을 위해, 나는 쿼리에 의미있는 제한을 두는 건의 할 것입니다. 이것은 또한 마법의보고 수 있음을 본 적이있다 사람에게 혼란을 줄이고, 한 번에 처리하고자하는 레코드 수를 적어도 통신의 추가 혜택을 것이다.

    당신이 정말로 데이터베이스에서 모든 18 개 quintillion 기록을 얻을해야하는 경우, 어쩌면 당신이 정말 원하는 것은 1 억 루프 184000000000 시간의 단위를 잡아 것입니다.

  4. ==============================

    4.또 다른 방법은 autoimcremented 열을 선택하고 HAVING 사용하여 필터링하는 것입니다.

    또 다른 방법은 autoimcremented 열을 선택하고 HAVING 사용하여 필터링하는 것입니다.

    SET @a := 0; 
    select @a:=@a + 1 AS counter, table.* FROM table 
    HAVING counter > 4
    

    하지만 아마 상한 접근 방식을 고수한다.

  5. ==============================

    5.내가 가장 좋은 방법에 대해 읽고 있었다 그냥 오늘은 MySQL의 테이블에서 엄청난 양의 데이터 (이상 백만 행)을 얻을 수 있습니다. 한 가지 방법은 LIMIT의 오프셋되는 X, X, Y와 y는 반환 할 마지막 행을 사용하여, 제안입니다. 내가 발견하지만, 그렇게 할 수있는 가장 효율적인 방법은 아니다. 당신이 자동 증가 열이있는 경우, 당신은 쉽게하는 기록에서 시작하고 싶은 말을 WHERE 절에 SELECT 문을 사용할 수 있습니다.

    내가 가장 좋은 방법에 대해 읽고 있었다 그냥 오늘은 MySQL의 테이블에서 엄청난 양의 데이터 (이상 백만 행)을 얻을 수 있습니다. 한 가지 방법은 LIMIT의 오프셋되는 X, X, Y와 y는 반환 할 마지막 행을 사용하여, 제안입니다. 내가 발견하지만, 그렇게 할 수있는 가장 효율적인 방법은 아니다. 당신이 자동 증가 열이있는 경우, 당신은 쉽게하는 기록에서 시작하고 싶은 말을 WHERE 절에 SELECT 문을 사용할 수 있습니다.

    예를 들어,     TABLE_NAME FROM SELECT * WHERE ID> X;

    당신 만 보여 당신에게 오프셋에 맞게 레코드를 LIMIT를 사용하고 때 MySQL이 모든 결과를 얻을 것 같다 성능을하지 최선.

    출처 :이 질문에 MySQL의 포럼에 대답. 그냥 메모를 가지고, 문제는 6에 대한 살입니다.

  6. ==============================

    6.당신은 LIMIT와 MySQL의 문을 사용할 수 있습니다 :

    당신은 LIMIT와 MySQL의 문을 사용할 수 있습니다 :

    START TRANSACTION;
    SET @my_offset = 5;
    SET @rows = (SELECT COUNT(*) FROM my_table);
    PREPARE statement FROM 'SELECT * FROM my_table LIMIT ? OFFSET ?';
    EXECUTE statement USING @rows, @my_offset;
    COMMIT;
    

    MySQL은 5.5.44에서 테스트. 따라서, 우리는 수 18,446,744,073,709,551,615의 삽입을 방지 할 수 있습니다.

    참고 : 트랜잭션이 있는지 변수 @rows 문의 실행에서 고려 테이블에 계약에 있다고한다.

  7. ==============================

    7.다른 사람은 MySQL의 설명서에서 언급 한 바와 같이. 그것을 달성하기 위해,이 끔찍한 수 (18,446,744,073,709,551,615) 인 부호없는 큰 INT의 최대 값을 사용할 수 있습니다. 그러나 조금 덜 할 수 있습니다에게 물결표 "~"비트 연산자를 지저분하게합니다.

    다른 사람은 MySQL의 설명서에서 언급 한 바와 같이. 그것을 달성하기 위해,이 끔찍한 수 (18,446,744,073,709,551,615) 인 부호없는 큰 INT의 최대 값을 사용할 수 있습니다. 그러나 조금 덜 할 수 있습니다에게 물결표 "~"비트 연산자를 지저분하게합니다.

      LIMIT 95, ~0
    

    그것은 비트 부정으로 작동합니다. "~ 0"의 결과는 18,446,744,073,709,551,615입니다.

  8. ==============================

    8.나는이 오래된 것을 알고 있지만 내가 사용하는 것이 해결책이다, 그래서 나는 비슷한 응답을 참조 didnt한다.

    나는이 오래된 것을 알고 있지만 내가 사용하는 것이 해결책이다, 그래서 나는 비슷한 응답을 참조 didnt한다.

    첫째, 나는 기록이 존재 얼마나 많은 볼 수있는 테이블에 카운트 쿼리를 실행합니다. 이 쿼리는 빠르고 정상적으로 실행 시간은 무시할 수있다. 뭔가 같은 :

    SELECT COUNT(*) FROM table_name;
    

    그럼 내가 (즉 최대 행 수이기 때문에 테이블이 가능하게 반환 할 수) 내 한계로 계산에서 얻은 결과를 사용하여 내 쿼리를 작성합니다. 뭔가 같은 :

    SELECT * FROM table_name LIMIT count_result OFFSET desired_offset;
    

    또는 같은 가능성이 뭔가 :

    SELECT * FROM table_name LIMIT desired_offset, count_result;
    

    필요한 경우 물론, 당신은 한계로 공급하는 실제 정확한 값을 얻을 수 count_result에서 desired_offset을 뺄 수있다. 은 "18,446,744,073,709,551,610"값 만 나던 메이크업 감각을 전달하면 실제로 제공하기 위해 적절한 제한을 결정 할 수 있습니다.

  9. ==============================

    9.

    WHERE .... AND id > <YOUROFFSET>
    

    ID는 당신이 가지고있는 자동 증가 또는 고유 숫자 열 수 있습니다 ...

  10. from https://stackoverflow.com/questions/255517/mysql-offset-infinite-rows by cc-by-sa and MIT license