2012-07-27 2 views
10

내 프로그램에는 삽입 수가 적고 자주 실행되는 프로그램이 즉각 필요하지 않으므로 INSERT DELAYED으로 변경되었습니다. 내 코드를 살펴보고 WHERE 절에서 참조되는 필드를 확인하고 각 필드에 대한 인덱스를 추가해야합니까? 그렇다면 어떤 유형의 색인을 사용합니까? 속도가 느린 인서트입니까?WHERE 절의 모든 필드에 대해 인덱스를 추가해야합니까? - MySQL

또한 모든 데이터 유형에 대해 이러한 색인을 사용할 수 있습니까?

답변

13

인덱싱을 고려할 수있는 두 가지 중요한 위치가 있습니다. WHERE 절에서 참조되는 열과 JOIN 절에서 사용되는 열입니다. 즉, 특정 레코드를 검색하는 데 필요한 열에 대해 색인을 생성해야합니다.

  • WHERE 및 ORDER BY 절에 필요한 열만 색인화하십시오. 열을 많이 색인하면 단점이 발생합니다.
  • 인덱싱을 으로 간주하는 열에 NOT NULL 특성을 사용하면 NULL 값이 저장되지 않습니다.
  • 색인을 사용하지 않는 쿼리를 기록하려면 --log-long-format 옵션을 사용하십시오. 이 방법으로이 로그 파일을 검사하고 이에 따라 쿼리를 조정할 수 있습니다. 또한 쿼리 쿼리가 느립니다.
  • EXPLAIN 문을 사용하면 MySQL에서 쿼리를 실행하는 방법을 알 수 있습니다. 테이블이 결합되는 순서와 순서를 보여줍니다. 이것은 최적화 된 쿼리를 작성하는 방법을 결정하는 데 유용 할 수 있으며 열을 인덱싱해야하는지 여부를 결정할 수 있습니다.

blog이 좋습니다.

1

성능 문제가 발생하기 전에 쿼리를 변경하지 마십시오. 이는 시기상조입니다. 대신 MySQL 쿼리 로그를 사용하여 오랜 시간이 걸리는 쿼리를 확인하고 이러한 쿼리를 개선하는 데 집중하십시오.

+0

아직 웹 사이트를 개발하는 중입니다. 나중에 다시 돌아와서 고칠 필요없이 가능한 한 최적화 된 것으로 풀어 놓는 것이 좋습니다. –

+1

이 단계에서도 조기 최적화를하지 못하게 할 것입니다. 직접 사용하거나 친구가 사용하도록하여 사이트의 성능을 테스트하십시오. 그런 다음 쿼리 로그에서 어떤 쿼리가 느린 지 확인하십시오. 가능한 경우 이러한 종류의 최적화를 수행하는 대신 초기에 실행하십시오. –

+4

WHERE 절에 사용 된 필드에 인덱스를 추가하는 것은 조기 최적화가 아닙니다. 데이터베이스 디자인 101입니다. 테이블 구조를 결정할 때 항상 고려해야합니다. –

1

WHERE 절에서 사용할 필드에는 항상 인덱스를 추가해야합니다 (SELECT, UPDATE 또는 DELETE에 상관없이). 색인 유형은 필드의 데이터 유형과 각 행마다 고유 한 값이 필요한지 여부에 따라 다릅니다. 일반적으로 기본 인덱스 유형 (해시 대 Btree)은 자신이하는 일을 실제로 알지 않는 한 기본 설정으로 유지하는 것이 가장 좋습니다.

이제 개별 색인 (필드 당 하나) 또는 복합 색인 종류를 사용하는 방법은 응용 프로그램의 작동 방식에 따라 달라지며 고급 주제이므로 일반적으로 시작하기 만하면 각 필드를 사용하고 색인을 생성합니다. 기본 키에는 자동으로 인덱스가 있으므로 키에 다른 인덱스를 작성할 필요가 없습니다.