2009-07-01 2 views

답변

6

누군가 TINYTEXT가 VARCHAR보다 다른 방법으로 저장되었다고 말하면 믿지 마십시오.

실제 차이는 다음과 같습니다

  • TINYTEXT 및 기타 TEXT 필드를 VARCHAR 반면, MySQL의 힙 내부 메모리 행과는 별도로 저장됩니다() 필드가 64K 제한을 추가 (그래서 당신은 이상을 가질 수 TINYTEXT에서는 64K이고, VARCHAR에서는 그렇지 않습니다.)

  • TINYTEXT 및 기타 'blob-like'필드는 SQL 계층 (MySQL)이 사용할 때마다 디스크상의 임시 테이블을 강제로 사용하지만 VARCHAR은 여전히 ​​'메모리에서 정렬'되지만 (CHAR 전체 너비의 경우).

  • InnoDB는 내부적으로 tinytext인지 varchar인지 상관하지 않습니다. 검증하기 쉽고, VARCHAR (255)가있는 테이블 하나와 TINYINT가있는 테이블 하나를 생성하고 두 테이블 모두에 레코드를 삽입하는 것은 매우 쉽습니다.둘 다 16k 페이지를 하나씩 사용합니다 - 반면 오버 플로우 페이지가 사용되면 TINYTEXT 테이블은 'SHOW TABLE STATUS'에서 32k 이상을 차지해야합니다. 그들은 단일 행에 대한 힙 조각을 너무 많이 발생하지 않으며, MySQL의 내부 메모리에 하나의 64K 개체로 처리 할 수 ​​-

나는 일반적으로 VARCHAR (255)를 선호한다. InnoDB에서는 크기 차이를 무시할 수 있습니다.

1

나는 varchar가 tinytext보다 더 빠를 것으로 기대하며, 인터넷 검색은 일반적인 합의 인 것으로 보인다. 물론 시스템이 진정으로 확실한지 테스트해야합니다.

MySQL이 특정 종류의 작업 (조인, 정렬 등)을 수행 할 때 종종 임시 테이블을 만들기 때문에 더 빠릅니다. 임시 테이블에 BLOB 유형 (예 : tinytext)이 있으면이 테이블은 메모리 기반이 아닌 디스크 기반이 될 것이며 이는 물론 성능에 영향을 미칩니다.

+0

메모리에 블롭 포인터가 있고 블롭에 액세스하는 것만으로 디스크 히트가 발생하고 테이블의 해당 부분에 대해서만 말한 것입니다. –

0

char(255) - 더 많은 공간을 사용하지만 나중에 비교할 때 일정한 크기의 필드를 사용하는 것이 훨씬 빨라졌습니다. 당신은 단지 속도를 찾고 있다면, 여분의 공간은 패딩으로 채울 수 있으며, 나중에 공백을 무시하십시오.

그러나 MySQL에서는 varcharchar 유형이 같은 테이블에 존재하지 않도록합니다. [보통] varcharchar 사이의 비교도 허용하지 않습니다. 작년에 취미 용 테이블 구현을 할 때 이것을 발견했습니다 project.

+0

http://www.informit.com/articles/article.aspx?p=377652&seqNum=3에서 innodb 테이블에 대해 읽었을 때 varchar를 사용하는 것이 더 좋습니다. "내부 행 저장 형식은 고정 길이 및 고정 길이를 처리하지 않습니다. (모든 행은 열 값에 대한 포인터를 포함하는 헤더를 사용합니다), 고정 길이 CHAR 열을 사용하는 것은 가변 길이 VARCHAR 열을 사용하는 것보다 본질적으로 간단하지 않습니다. " –

+0

흥미 롭습니다 - 기사에 이의를 제기하지 마십시오. 내 경험이었습니다 .. 비록 MyISAM을 사용했을 수도 있습니다. – warren

1

CHAR/VARCHAR는 이러한 열이 기본 행 데이터 *와 동일한 페이지에 저장되므로 더 빠를 것입니다. 반면 TEXT 유형은 페이지에 저장됩니다 (해리슨의 의견을 참조하십시오).

사람들은 varchar (annoyingly)가 공백을 제거하기 때문에 tinytext를 많이 사용합니다. 이 동작은 MySQL 5.0에서 제거되었습니다.

(* 적어도 처음 768 바이트는 InnoDB 플러그인이 아니라 새로운 InnoDB 플러그인이 내장되어 있음).

+1

InnoDB는 모든 TEXT 유형을 페이지에 저장하지 않습니다. 열이 767 바이트를 넘는 경우에만 페이지에서 해당 열을 저장할 수 있습니다 (즉, 일부 행은 완전히 인라인으로 저장되고 다른 행은 외부에 저장 될 수 있음). TINYTEXT는 767 바이트 제한을 초과 할 수 없으므로 절대로 페이지 외부에 저장되지 않습니다. –