innodb 테이블을 MySQL에서 최적화했기 때문에, 절차 analsye()을 실행하여 권장 사항을 확인했습니다.MySQL의 innodb 테이블에서 더 빠릅니다 : varchar (255) 또는 tinytext?
결과는 (255)
성능 향상이 있는가가 tinytext 를 사용하여 한 수 tinytext 대신 VARCHAR의 이전 VARCHAR로 설정 된 모든 필드 (255)를 권장? 나는 단지 속도가 아니라 크기에 관심이있다.
innodb 테이블을 MySQL에서 최적화했기 때문에, 절차 analsye()을 실행하여 권장 사항을 확인했습니다.MySQL의 innodb 테이블에서 더 빠릅니다 : varchar (255) 또는 tinytext?
결과는 (255)
성능 향상이 있는가가 tinytext 를 사용하여 한 수 tinytext 대신 VARCHAR의 이전 VARCHAR로 설정 된 모든 필드 (255)를 권장? 나는 단지 속도가 아니라 크기에 관심이있다.
누군가 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에서는 크기 차이를 무시할 수 있습니다.
나는 varchar가 tinytext보다 더 빠를 것으로 기대하며, 인터넷 검색은 일반적인 합의 인 것으로 보인다. 물론 시스템이 진정으로 확실한지 테스트해야합니다.
MySQL이 특정 종류의 작업 (조인, 정렬 등)을 수행 할 때 종종 임시 테이블을 만들기 때문에 더 빠릅니다. 임시 테이블에 BLOB 유형 (예 : tinytext)이 있으면이 테이블은 메모리 기반이 아닌 디스크 기반이 될 것이며 이는 물론 성능에 영향을 미칩니다.
char(255)
- 더 많은 공간을 사용하지만 나중에 비교할 때 일정한 크기의 필드를 사용하는 것이 훨씬 빨라졌습니다. 당신은 단지 속도를 찾고 있다면, 여분의 공간은 패딩으로 채울 수 있으며, 나중에 공백을 무시하십시오.
그러나 MySQL에서는 varchar
및 char
유형이 같은 테이블에 존재하지 않도록합니다. [보통] varchar
과 char
사이의 비교도 허용하지 않습니다. 작년에 취미 용 테이블 구현을 할 때 이것을 발견했습니다 project.
http://www.informit.com/articles/article.aspx?p=377652&seqNum=3에서 innodb 테이블에 대해 읽었을 때 varchar를 사용하는 것이 더 좋습니다. "내부 행 저장 형식은 고정 길이 및 고정 길이를 처리하지 않습니다. (모든 행은 열 값에 대한 포인터를 포함하는 헤더를 사용합니다), 고정 길이 CHAR 열을 사용하는 것은 가변 길이 VARCHAR 열을 사용하는 것보다 본질적으로 간단하지 않습니다. " –
흥미 롭습니다 - 기사에 이의를 제기하지 마십시오. 내 경험이었습니다 .. 비록 MyISAM을 사용했을 수도 있습니다. – warren
CHAR/VARCHAR는 이러한 열이 기본 행 데이터 *와 동일한 페이지에 저장되므로 더 빠를 것입니다. 반면 TEXT 유형은
페이지에 저장됩니다 (해리슨의 의견을 참조하십시오).
사람들은 varchar (annoyingly)가 공백을 제거하기 때문에 tinytext를 많이 사용합니다. 이 동작은 MySQL 5.0에서 제거되었습니다.
(* 적어도 처음 768 바이트는 InnoDB 플러그인이 아니라 새로운 InnoDB 플러그인이 내장되어 있음).
InnoDB는 모든 TEXT 유형을 페이지에 저장하지 않습니다. 열이 767 바이트를 넘는 경우에만 페이지에서 해당 열을 저장할 수 있습니다 (즉, 일부 행은 완전히 인라인으로 저장되고 다른 행은 외부에 저장 될 수 있음). TINYTEXT는 767 바이트 제한을 초과 할 수 없으므로 절대로 페이지 외부에 저장되지 않습니다. –
메모리에 블롭 포인터가 있고 블롭에 액세스하는 것만으로 디스크 히트가 발생하고 테이블의 해당 부분에 대해서만 말한 것입니다. –