2013-10-16 3 views
0

MySQL에서 성능을 향상 시키려고합니다. latin1이 더 적은 바이트를 사용하기 때문에 Latin1 charset을 사용하여 배웠던 것은 UTF8을 사용하는 것보다 빠릅니다. 그러나 데이터 정렬을 변경하면 데이터가 어떻게 될지 궁금합니다. 오늘 제 신청서에있는 대부분의 것들이 아메리칸 영어로되어 있습니다. 그러나 다른 언어 상점도 없을 것이라고 보장 할 수는 없습니다. 누군가가 영어 이외의 데이터를 저장합니다. 나는 그 데이터에 대해별로 신경 쓰지 않습니다.데이터베이스의 데이터 정렬을 변경하면 어떻게됩니까?

내 질문 : 1) 내 데이터베이스의 데이터 정렬을 latin1로 변경하면 미국 영어로 작성되지 않은 데이터는 어떻게됩니까? 2) 어느 것이 1입니까? latin1_bin, latin1_general_ci 또는 latin1_general_cs를 사용합니까? 가능한 경우 차이점은 무엇입니까? 3) 데이터베이스의 데이터 정렬을 변경할 때 각 테이블의 데이터 정렬을 개별적으로 변경해야합니까?

감사합니다.

+0

사람들이 응용 프로그램에서 사용하는 것으로 생각되지 않을 수 있습니까? 레거시 Latin1 인코딩으로 전환하지 마십시오. 나는 그것이 당신에게 측정 가능하게 더 빠르거나 더 효율적인 공간임을 보여주는 벤치 마크를 제시하도록 도전 할 것입니다. MySQL *은 UTF-8 문자 당 3 바이트를 예약하지만, 반드시 그것을 사용하지는 않습니다. – tadman

답변

0

UTF 8은 이상한 문자가있는 경우에만 여분의 바이트를 사용합니다. 그래서 정말로, 당신은 당신의 데이터 정렬을 변경해서는 안됩니다. 도움이되지 않을 것입니다. UTF 16은 모든 언어의 모든 문자를 포함하도록 개발되었으며, 예, 16 비트를 사용하므로 utf16을 사용하는 경우 표준 라틴 문자가 대부분있는 ​​경우 utf8을 제안합니다. utf 8은 절충안입니다. 그것은 "더 많은 바이트가오고있다"는 것을 의미하는 특수 문자를 가지고 있고 그것을 본다면, 다음 문자들을 함께 그룹화합니다. 그러나 가지고있는 것이 모두 라틴 문자 인 경우, 라틴어 데이터 정렬의 바이트 수와 정확하게 같습니다.

구체적으로 대답하려면 새 테이블에 대한 기본 colation을 설정할 수 있지만, 기존 테이블 각각에 대해 수행해야합니다. 당신은 테이블을 나열하는 SQL 문을 사용하여 그것을 수행 할 수 있으며, 각각을 변경하여 SQL 문을 실행합니다. (1을 변경하고 SQL 문에 주목하십시오). 그러나 다시는 그것을하지 마십시오. utf8은 이유있는 표준입니다. 실적 문제는 다른 곳에서 발생합니다.

+0

정보를 제공해 주셔서 감사합니다. 그러나 MySQL Connect에 참석하여 latin1을 사용하여 빠른 성능을 제공 할 것을 제안했습니다. 지금은 혼란 스럽습니다. 그들은 utf8을 latin1로 바꿀 수 있다면 그것을 시도한다고 말했다. – Jaylen

+0

다시 말하지만, 실제로 라틴 문자 만 사용하는 경우에는 데이터 정렬을 변경하고 "이동하십시오". 이론적으로는 mysql이 "더 많은 문자가 오는지"검사 할 필요가 없기 때문에 이론적으로는 텍스트 기반 쿼리에서 2 ~ 3 마이크로 초 더 빨라질 수 있지만 대부분의 내부 텍스트 엔진은 어쨌든 처리 할 때 텍스트를 utf16으로 실제로 변환합니다. MySQL Connect의 일부 "old pro"는 라틴어가 새로운 fangled utf8 필드보다 "더 간단"하다고 생각해야하지만 현재 "simple"은 범용 utf8 필드입니다. 그것은 당신의 부름이지만 성능 향상을 보지 못할 것이라고 확신합니다. "이것들은 당신이 찾고있는 바이트가 아닙니다." – AwokeKnowing

+0

나는 봅니다. 다른 것을 물어 보자. utf8에서 외부 ID를 제외한 모든 것을 유지한다면? 외부 ID는 CHAR (18)로 설정되며, 이들을 lation1_generic_ci로 변경하면 영문자와 숫자 값을 사용하여 조회를 빠르게 할 수 있습니까? 또한 id 열에 대한 색인이 생성되었습니다. 두 문자열을 비교하는 – Jaylen