2011-10-21 1 views
1

나는 약 500,000 행의 InnoDB 테이블을 가지고 있으며 선택 쿼리 성능을 향상 시키려고합니다.MySQL InnoDB 테이블의 텍스트 필드 크기가 쿼리에 필드가 사용되지 않을 때 성능에 영향을 줍니까?

테이블 크기는 현재 약 2GB이며, 대부분의 크기는 꽤 많은 xml 데이터를 저장하는 텍스트 필드에서 가져옵니다. 이 xml 데이터는 자주 읽히지 않으며 대부분의 쿼리는이를 선택하지 않습니다.

이 데이터를 별도의 테이블로 이동하면 한 번에 제한된 메모리에 더 많은 행을 보관할 수 있으므로 쿼리 속도가 빨라 집니까?

+0

선택 *을 blah blah .....에서 사용 하시거나 bl_1에서 col_1, col_2, my_mighty_text_col을 선택 하시겠습니까? 선택 쿼리에 큰 열을 포함하지 마십시오. –

+0

원하는 컬럼을 지정하고 있으므로 col1, col2 등을 선택하십시오. select 문에 큰 필드를 지정하지 않으면 MySQL이 메모리에 필요한 행의 일부만로드한다는 의미입니까? 또는 MySQL이 한 번에 전체 행을로드합니까? – Zane

답변

2

테이블이 InnoDB이고 SELECT에 텍스트 필드를 지정하지 않으면 OK 여야합니다. 그러나 기본 키가 가능한 한 작아야합니다 (은 gen_clust_index에 저장되어 있음). Keep in mind that InnoDB performs a clustered index lookup with every query, regardless of non-Indexed Lookups, Indexed Lookups, or Primary Key Lookups.

이 질문에 대한 질문에도 불구하고 그 반대가 여전히 고려되어야한다는 것을 보여줍니다. 결과 집합에 텍스트 필드를 포함하는 쿼리가있을 것입니다.

나는 다음을 확신 할 것이다 : MySQL 패킷, InnoDB 로그 파일 및 InnoDB 로그 버퍼의 크기는 적절하게이다. 왜이 설정에 관심이 있습니까? Rows of Data must pass through these structures. Make sure that max_allowed_packet is large enough to hold the biggest text field you have in the database at least 10 times. Same goes with InnoDB Log Files and the InnoDB Log Buffer.

+0

정보를 제공해 주셔서 감사합니다. 이 작업을 실행하고 회신하기 전에 말한 내용을 확인하기 위해 벤치 마크를 실행하기를 희망했지만 아직 기회가 없었습니다. 내가 그렇게한다면, 나는 너를 새롭게 할 것이다. – Zane