2015-01-08 2 views
-1

이 상황에서 어떤 일이 발생하는지 약간 혼란 스럽습니다. SQL Server에 VARCHAR (500)이라는 열이 있습니다. 마이 그 레이션 툴 (MySQL Workbench)은 인덱스를 255로 자릅니다.이 post과 Google의 많은 다른 곳에서 볼 수 있듯이 255가 VARCHAR 기반 인덱스의 한계라고 제안합니다. 이 post here에서 처음 255 자임을 알았습니다. 그러나 나는 그것이 실제로 어떻게 작동하는지 혼란 스럽다. 즉 바보 같은 행운을 빌어 실제 열의 255 포인트 뒤에있는 부분 문자열 ("like"절 사용)을 찾고 있다면 어떻게 될까요? 또는 "=", ">"등을 사용하여 열을 비교하지만 비교 문자열에 255 개 이상을 사용하면 어떻게됩니까? 이런 종류의 상황에서 인덱스를 그냥 무시합니까?마이그레이션 중에 MySQL VARCHAR 인덱스가 255로 잘림

일종의 SQL 서버로 일해온 MySQL의 새로운 기능으로 기대되는 것을 이해하려고합니다. 감사.

답변

0

한계는 바이트 단위로 적용되며, 한계는 InnoDB의 경우 767입니다. 따라서 UTF8 인 경우 255 자 (MySQL의 UTF8 구현은 최대 3 바이트 문자 만 지원함)의 한계입니다. 싱글 바이트 문자 세트 인 경우 색인이 분명히 커질 수 있습니다.

열이 인덱스보다 큰 경우 인덱스를 사용하여 정확히 일치하는 항목을 찾을 수 없으며 일부 테이블 스캔은 수행해야합니다. 그러나 범위를 닫기 위해 인덱스를 사용합니다.

LIKE 및 다른 비교 연산자는 여전히 정상적으로 작동합니다. 그들은 단지 덜 열성적 일 수 있습니다.

+0

감사합니다. "like"부분 문자열이 처음 255 자 ("% FUN % '와 같은 열", "FUN"부분 문자열이 처음 255 자 이내 인 경우)이 아닌 경우 어떻게됩니까? 이 경우 일치하는 행을 반환하지 않거나 테이블 스캔을 수행합니까? – user3329922

+1

'LIKE '% FUN %''을 사용하면 인덱스 크기에 상관없이 인덱스를 전혀 사용할 수없고 어쨌든 테이블 스캔 만 할 수 있습니다. 이 경우 인덱스 제한은 중요하지 않습니다. FULLTEXT 인덱스를 원하십니까? –

+0

고마워, 지금 받았어. 나는 그런 "같은"진술이 어쨌든 인덱스를 사용할 수 없게 될 것이라는 점을 잊어 버렸지 만, 이제는 그것에 대해 생각하는 것이 완전히 이해된다. – user3329922