>  기사  >  데이터 베이스  >  mysql의 데이터 유형 최적화 방법에 대한 자세한 설명

mysql의 데이터 유형 최적화 방법에 대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-06-28 14:14:181133검색

이 글에서는 다중 열 인덱스 사용 및 기타 관련 최적화 방법을 포함하여 MySQL의 데이터 유형과 관련된 최적화 방법을 주로 소개합니다. 도움이 필요한 친구는

효율성에 도움이 되는 유형 선택

1을 참조할 수 있습니다. 데이터를 가능한 한 작게 만드세요

가장 기본적인 최적화 중 하나는 데이터(및 인덱스)가 디스크(및 메모리)에서 가능한 한 적은 공간을 차지하도록 만드는 것입니다. 디스크 읽기가 더 빠르고 일반적으로 주 메모리를 덜 사용하기 때문에 이는 큰 개선을 가져올 수 있습니다. 더 작은 열을 인덱싱하면 인덱스가 더 적은 리소스를 차지합니다.

다음 기술을 사용하면 테이블 성능을 향상하고 저장 공간을 최소화할 수 있습니다.

·가장 효율적인(가장 작은) 유형을 사용하세요. MySQL에는 디스크 공간과 메모리를 절약하는 다양한 전문 기능이 있습니다.

·테이블을 더 작게 만들려면 더 작은 정수 유형을 사용하세요. 예를 들어 MEDIUMINT가 INT보다 나은 경우가 많습니다.

·가능하다면 열을 NOT NULL로 선언하세요. 모든 것이 더 빨라지고 열당 1비트가 절약됩니다. 애플리케이션에 NULL이 정말로 필요한 경우 의심 없이 이를 사용해야 하며 기본적으로 모든 열에 NULL을 두는 것을 피해야 합니다.

2. 가변 길이 열 대신 고정 길이 열을 사용하세요.

이 규칙은 자주 수정되고 조각화되기 쉬운 테이블에 특히 중요합니다. 예를 들어 VARCHAR 열 대신 CHAR 열을 선택해야 합니다. 단점은 고정 길이 열을 사용할 때 테이블이 더 많은 공간을 차지한다는 것입니다. 그러나 공간 비용을 감당할 수 있다면 고정 길이 행을 사용하는 것이 가변 길이 행을 사용하는 것보다 훨씬 빠릅니다.

3. 열을 NOT NULL로 정의하세요

이렇게 하면 처리 속도가 빨라지고 공간이 덜 필요해집니다. 또한 특수 사례 NULL을 확인할 필요가 없기 때문에 때로는 쿼리를 단순화합니다.

4. ENUM 열 사용을 고려하세요

제한된 수의 특정 값만 포함된 열이 있는 경우 ENUM 열로 변환하는 것을 고려해야 합니다. ENUM 컬럼 값은 내부적으로 숫자값으로 표현되기 때문에 더 빠르게 처리할 수 있습니다.

BLOB 및 TEXT 유형 정보
1. BLOB 및 TEXT 유형 사용의 장점

BLOB를 사용하여 패키지되거나 패키지되지 않은 데이터를 애플리케이션에 저장하면 원래 여러 검색 작업이 필요했던 데이터를 단일 검색으로 검색할 수 있습니다. 작업. 표준적인 테이블 구조로 쉽게 표현되지 않는 데이터나 시간에 따라 변하는 데이터를 저장할 때도 유용합니다.

2. BLOB 및 TEXT 유형 사용 시 발생할 수 있는 단점

반면에 BLOB 값에는 특히 많은 수의 DELETE 또는 UPDATE 작업을 수행할 때 고유한 문제가 있습니다. 삭제 BLOB를 삭제하면 나중에 레코드로 채워야 하거나 크기가 다른 여러 레코드로 채워야 하는 테이블에 큰 공백이 남습니다.

필요한 경우가 아니면 큰 BLOB 또는 TEXT 값을 검색하지 마세요. 예를 들어, WHERE 절이 정확히 원하는 행으로 결과를 제한한다는 확신이 없다면 SELECT * 쿼리는 좋은 생각이 아닙니다. 그렇게 하면 목적지 없이 네트워크를 통해 매우 큰 BLOB 값을 끌 수 있습니다. 이는 다른 열에 저장된 BLOB 식별 정보가 유용한 또 다른 상황입니다. 이 열을 검색하여 원하는 행을 확인한 다음 정규화된 행에서 BLOB 값을 검색할 수 있습니다.

3. 필수 지침

조각화가 발생하기 쉬운 테이블에는 OPTIMIZE TABLE을 사용하세요.
수정이 많은 테이블, 특히 가변 길이 열이 있는 테이블은 조각화되기 쉽습니다. 조각화는 테이블이 저장된 디스크 블록에 사용되지 않은 공간을 생성하므로 좋지 않습니다. 시간이 지남에 따라 유효한 행을 얻으려면 더 많은 블록을 읽어야 하므로 성능이 저하됩니다. 이 문제는 가변 길이 행이 있는 모든 테이블에 존재하지만 BLOB 열의 경우 크기가 너무 다양하기 때문에 더 문제가 됩니다. OPTIMIZE TABLE을 정기적으로 사용하면 성능 저하를 방지하는 데 도움이 됩니다.

다중 열 인덱스 사용

다중 열 인덱스 열이 유용할 때도 있습니다. 한 가지 기술은 다른 열을 기반으로 해시 값을 작성하고 이를 별도의 열에 저장한 다음 해시 값을 검색하여 행을 찾을 수 있는 것입니다. 이는 정확히 일치하는 쿼리에만 작동합니다. (해시 값은 "a228cf180a9d4a823eb027d49fa23e5a="와 같은 연산자를 사용한 범위 검색에는 유용하지 않습니다.) MySQL 버전 3.23 이상에서는 MD5() 함수를 사용하여 해시 값을 생성할 수 있습니다. 해시 인덱스는 BLOB 열에 특히 유용합니다. 한 가지 주의할 점은 MySQL 3.23.2 이전 버전에서는 BLOB 유형을 인덱싱할 수 없다는 것입니다. 버전 3.23.2 이상에서도 해시 값을 식별 값으로 사용하여 BLOB 값을 찾는 것이 BLOB 열 자체를 검색하는 것보다 빠릅니다.

BLOB 값을 별도의 테이블로 분리

어떤 경우에는 BLOB 열 다음에 테이블을 이동할 수 있다면 BLOB 열을 테이블에서 다른 하위 테이블로 이동하는 것이 합리적일 수 있습니다. 이동되었습니다. 고정 길이 라인 형식으로 변환합니다. 이는 기본 테이블의 조각화를 줄이고 고정 길이 행의 성능 이점을 활용합니다.

ANALYZE 프로시저를 사용하여 테이블 열을 검사합니다.
MySQL 3.23 이상을 사용하는 경우 PROCEDURE ANALYSE( )를 실행하여 테이블의 열에 대해 제공되는 정보를 확인해야 합니다.

ANALYSE([max elements,[max memory]])

쿼리의 결과를 확인합니다. 그리고 결과 분석을 반환합니다.

max 요소(기본값 256)는 분석이 알아차리는 열당 고유 값의 최대 개수입니다. 이는 최적의 컬럼 유형이 ENUM 유형이어야 하는지 여부를 확인하기 위해 ANALYZE에서 사용됩니다.

max 메모리(기본값 8192)는 분석이 모든 고유 값을 찾으려고 할 때 각 열에 할당되어야 하는 최대 메모리 양입니다.

SELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max elements,[max memory]])

예:

mysql>SELECT * FROM student PROCEDURE ANALYSE();

mysql>SELECT * FROM student PROCEDURE ANALYSE(16,256);

해당 출력에는 테이블의 각 열에 가장 적합한 열 유형에 대한 권장 사항이 포함된 열이 있습니다. 두 번째 예에서는 PROCEDURE ANALYSE()에게 16개 이상의 값을 포함하거나 256바이트를 초과하는 ENUM 유형을 제안하지 않도록 요청합니다(이 값은 필요에 따라 변경될 수 있음). 이러한 제한이 없으면 출력이 매우 길어질 수 있으며 ENUM 정의도 읽기 어려울 수 있습니다.

PROCEDURE ANALYSE( )의 출력을 기반으로 보다 효율적인 유형을 활용하기 위해 테이블을 변경할 수 있음을 알 수 있습니다. 값 유형을 변경하려면 ALTER TABLE 문을 사용하세요.

위 내용은 mysql의 데이터 유형 최적화 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.