복붙노트

[SQL] 너무 많은 인덱스에는 mysql?

SQL

너무 많은 인덱스에는 mysql?

나는 약간의 시간이 우리의 현재 데이터베이스 최적화를 지출하고있다.

내가 특별히 인덱스에서 찾고 있습니다.

몇 가지 질문이 있습니다 :

해결법

  1. ==============================

    1.데이터 검색 - SELECT 문.

    데이터 검색 - SELECT 문.

    데이터 조작 - INSERT, UPDATE, DELETE 문.

    당신은 당신이 더 나은 데이터를 검색 성능을 얻으려면 느끼는 경우.

    무거운 데이터 조작 볼 테이블에 - 삽입, 업데이트 ...

    피복 률 (하나 개 이상의 컬럼에 대한 인덱스)를 처리 할 때 인덱스 열 정의에서 왼쪽에서 오른쪽으로 쿼리, 열의 순서를 해결할 필요가있다. 문의 열 순서는 중요 열만 1, 2, 3의하지 않습니다 - 요구 인덱스 이전 1 열에 대한 참조를 사용할 수 있습니다 성명. 컬럼 2, 3 참조 만 있다면, 1/2/3 용 커버 인덱스를 사용할 수 없습니다.

    MySQL의에서, 하나의 인덱스가 쿼리에서 SELECT / 문마다 사용할 수 있습니다 (하위 쿼리 / 등은 별도의 문으로 볼 수 있습니다). 그리고 MySQL이 허용 테이블 당 공간의 크기에 한계가있다. 또한, 인덱스 컬럼에 함수를 실행하는 쓸모없는 인덱스를 렌더링 - IE를 :

    WHERE DATE(datetime_column) = ...
    
  2. ==============================

    2.이 질문에 대한 답변의 일부에 동의하지 않는다.

    이 질문에 대한 답변의 일부에 동의하지 않는다.

    물론이야. 쿼리의 사용되지 않는 인덱스를 작성하지 마십시오. 중복 인덱스를 작성하지 마십시오. 도움에 PT-중복 키 검사기 및 PT-인덱스 사용과 같은 사용 도구는 필요하지 않은 인덱스를 발견 할 수 있습니다.

    다른 답변 DELETE INSERT / UPDATE가 / 당신이 느린 이상의 인덱스 것을 조언했다. 그건 사실뿐만 아니라 WHERE 절을 가지고와 MySQL에, UPDATE 및 DELETE 지원이 너무 조인 UPDATE의 많은 사용을 고려하고 삭제합니다. 인덱스 업데이트 인덱스의 오버 헤드 구성하는 것보다 이러한 쿼리 더 많은 혜택을 누릴 수 있습니다.

    또한 이노는 갱신 또는 삭제의 영향을 행을 잠근다. 그들은이 행 수준 잠금을 호출하지만 정말 인덱스 수준 잠금입니다. 검색 범위를 좁힐 수있는 인덱스가없는 경우, InnoDB는 당신이 변화하고있는 특정 행보다 더 많은 행을 잠글 수 있습니다. 심지어 테이블의 모든 행을 잠글 수 있습니다. 이 잠금은 논리적으로 충돌하지 않는 경우에도, 다른 클라이언트에 의한 변경을 차단합니다.

    당신이 알고있는 경우에 당신은 위의 경우 중 하나에 인덱스에서 도움이 될 쿼리를 실행해야합니다.

    인덱스가 다른 기존 인덱스의 왼쪽 접두사 인 경우, 또는 인덱스는 실행해야 쿼리의 도움이되지 않습니다.

    어떤 경우에는, MySQL은 인덱스 병합 최적화, 중 노동 조합을 수행하거나 독립적 인 인덱스 검색의 결과를 교차 할 수 있습니다. 그러나 인덱스 병합을 수행 할 필요가 없습니다 있도록 단일 인덱스를 정의하는 더 나은 성능을 제공합니다.

    내 컨설팅 고객 중 하나, 나는 인덱스 없었다 대다 테이블에 다중 열 인덱스를 정의하고, 자신의 94 만 배 질의에 가입 향상!

    올바른 인덱스를 설계하면 최적화에 필요한 쿼리를 기반으로, 복잡한 과정이다. 당신은 "인덱스 모두"또는 같은 광범위한 규칙해서는 안 "업데이트를 늦추고 피하기 위해 인덱스 아무것도."

    프레젠테이션은 정말, 인덱스를 설계하는 방법을 참조하십시오.

  3. ==============================

    3.인덱스는 손의 문제로 통보해야합니다 테이블은 등, 응용 프로그램이 실행 쿼리

    인덱스는 손의 문제로 통보해야합니다 테이블은 등, 응용 프로그램이 실행 쿼리

    선택합니다.

    인덱스를 업데이트해야하기 때문에 인서트, 속도가 느려집니다.

    응용 프로그램이 다른 WHERE 절을 필요로합니다.

    당신이 그것을 필요로하지 않는 경우 조회 또는 고유성 제약 조건을 적용합니다.

    내가 질문을 이해하지 않습니다. 여러 열을 포함하는 고유성 제약 조건이있는 경우, 모든 수단 등을 모델.

  4. ==============================

    4.예. 인덱스를 만들 필요로 만들 찾고 외출하지 마십시오.

    예. 인덱스를 만들 필요로 만들 찾고 외출하지 마십시오.

    인덱스 테이블 / 뷰에 대한 모든 쿼리.

    각각의 새로운 기록 색인해야하므로 인덱스 테이블에 대한 모든 INSERT 문은 둔화 될 것이다.

    때 쿼리가 허용 속도로 실행되고 있지 않습니다. 당신은 당신이 필터 (성능하다고 판단이 맞는 경우)에 검색을 기반으로 인덱스를 추가해야하는 경우에는 클러스터 PK의 일부가 아닌 레코드를 필터링 할 수있다.

    당신은 그것의 이익을 위해 그것을 할 때 - 즉에게 오버 최적화.

    당신이 개선하고자하는 쿼리에 따라 다릅니다.

  5. ==============================

    5.그래, 모든 일처럼, 너무 많은 인덱스는 데이터 처리 속도가 느려집니다.

    그래, 모든 일처럼, 너무 많은 인덱스는 데이터 처리 속도가 느려집니다.

    쿼리가 너무 느린 경우 인덱스를 추가하는 좋은 아이디어 (즉, 당신이 너무 많은 쿼리에 조인)입니다. 당신은 성능을 조정할, 당신은 솔리드 모델을 구축 한 후에 만이 최적화를 사용해야합니다.

  6. from https://stackoverflow.com/questions/4120160/mysql-too-many-indexes by cc-by-sa and MIT license