2012-06-25 2 views
0

미리 질문 해 주셔서 감사드립니다. 내가 일하고 있어요 데이터베이스가 (T1 300 개 000 000 라인이며 T2 300 개 000 라인이다) 매우 크다 내가 함께 MySQL과 파이썬을 사용하고 있는데 나는이 SQL 명령을 처음오랫동안 tmp 테이블에서 쿼리가 멈추었습니다.

SELECT T1.col1 AS t, T1.col4 AS d, T2.col3 AS e, T2.col4 AS d, T2.col7 AS p, 
    T2.col13 AS de, 
    T2.col5 AS carrier, T2.col12 AS f, T2.col10 AS c 
    FROM table AS T1 
    JOIN table_c AS T2 ON T1.col1 = T2.col1 
    ORDER BY RAND() 
    LIMIT 100000 ; 

을 실행하고 있습니다 phpMyAdmin 덕분에 그들을 만들었습니다. col1 of T1col1 of T2에도 색인을 생성했습니다. 하지만 SQL 명령을 실행하면 tmp 테이블 페이징 메시지 (전체 주말 동안 남겨두고 여전히 같은 지점에 있습니다.)

매개 변수 tmp_table_size를 수정하려고 시도했지만 변경되지 않았습니다. 아무것도

나는 나에게 적절한 시간에이 명령을 실행하기위한 해결책이 될 수 있는지 아무 생각

모든 제안

이 도와 주셔서 너무 감사 환영

+0

같은 문제와 함께 싸울 몇 가지 방법을 찾을 수 있습니다 . 또한 무엇을 하려는지 설명하십시오. 왜 무작위로 10 만 행을 반환합니까? –

+0

안녕하십니까. 응답 해 주셔서 감사합니다. 데이터를 가져 왔고 쿼리가 원활하게 실행되었으므로 데이터가 가장 중요한 데이터 세트를 얻는 데 추가 작업이 필요했기 때문에 'ORDER BY RAND()'를 사용하여 속도를 높이십시오. 쿼리 – Rim

답변

1

. ORDER BY RAND()은 조인 된 결과 집합 (각 경우에 수억 개의 행)에있는 각 행에 무작위 값을 할당하여 실제로 모든 행을 작성하고 디스크에 정렬 한 다음 준비가 되었다면 선택하여 반환 할 수 있습니다 당신을위한 100000 행.

솔루션은 분명 아니지만, 당신은 ORDER BY와 LIMIT 절을 제거하고 우리가 그것을 반환 행 수를 알려, 어떤 시간 내에 바랍니다 How can i optimize MySQL's ORDER BY RAND() function?

0
  1. EXPLAIN EXTENDED SELECT ...을 사용하면 쿼리에 포함 된 정보 (예상되는 행 수, 사용중인 인덱스 수 등)를 확인할 수 있습니다.

  2. EXPLAIN 쿼리는 또한, "1 경고 (들)"가 표시 SHOW WARNINGS를 볼 수 있습니다 - 귀하의 요청이 쿼리 최적화 후처럼 보이는 방법을 정확하게 보여줄 것이다.

  3. 후 당신의 테이블 구조 (SHOW CREATE TABLE ...), 두 테이블에 대한 테이블 상태 및 관련 구성 (max*, *buffer*, *size* 일치하는 모든 구성 항목).

  4. 포스트 하드웨어 구성 (CPU - 속도? 코어? 램 - 총 무료?)를 ORDER BY RAND() 트릭은 대형 테이블 크기와 사용해서는 안됩니다

관련 문제