itsource

mysql 인덱스가 너무 많습니까?

mycopycode 2022. 9. 28. 00:08
반응형

mysql 인덱스가 너무 많습니까?

현재 데이터베이스를 최적화하는 데 시간이 좀 걸리고 있습니다.

저는 특별히 인덱스를 보고 있습니다.

몇 가지 질문이 있습니다.

  • 지표가 너무 많은가요?
  • 인덱스의 속도가 빨라지는 것은 무엇입니까?
  • 인덱스가 느려지는 것은 무엇입니까?
  • 인덱스를 추가하는 것은 언제가 좋을까요?
  • 인덱스를 추가하는 것이 좋지 않은 때는 언제입니까?
  • 다중 인덱스와 다중 열 인덱스의 찬반 양론

인덱스의 속도가 빨라지는 것은 무엇입니까?

데이터 검색 - SELECT 문.

인덱스가 느려지는 것은 무엇입니까?

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

인덱스를 추가하는 것은 언제가 좋을까요?

데이터 검색 성능을 향상시키고 싶은 경우.

인덱스를 추가하는 것이 좋지 않은 때는 언제입니까?

대량의 데이터 조작을 볼 수 있는 테이블 - 삽입, 업데이트...

다중 인덱스와 다중 열 인덱스의 찬반 양론

쿼리에서는 인덱스 열 정의에서 커버링 인덱스(복수의 열에 있는 인덱스)를 처리할 때 왼쪽에서 오른쪽으로 열의 순서를 지정해야 합니다.문장의 열 순서는 중요하지 않습니다. 1, 2, 3열만 해당됩니다. 문장은 인덱스를 사용하려면 먼저 열 1에 대한 참조가 있어야 합니다.2열 또는 3열에 대한 참조만 있는 경우 1/2/3에 대한 커버링 인덱스를 사용할 수 없습니다.

MySQL에서는 쿼리의 SELECT/스테이트먼트당 하나의 인덱스만 사용할 수 있습니다(서브쿼리 등은 별도의 스테이트먼트로 표시됩니다).MySQL이 허용하는 테이블당 공간에는 제한이 있습니다.또한 인덱스된 열에서 함수를 실행하면 인덱스가 무용지물이 됩니다(IE:

WHERE DATE(datetime_column) = ...

나는 이 질문에 대한 몇 가지 답변에 동의하지 않는다.

지표가 너무 많은가요?

물론이야.쿼리에서 사용하지 않는 인덱스를 만들지 마십시오.중복 인덱스를 만들지 마십시오.pt-duplicate-key-checkerpt-index-usage와 같은 도구를 사용하여 불필요한 인덱스를 검색할 수 있습니다.

인덱스의 속도가 빨라지는 것은 무엇입니까?

  • WHERE 절에서 조건을 검색합니다.
  • 가입 조건
  • ORDER BY 케이스도 있습니다.
  • GROUP BY의 경우도 있습니다.
  • 고유 제약 조건
  • 외부 키 제약 조건.
  • 풀텍스트 검색

다른 답변에서는 인덱스가 많을수록 INSERT/UPDATE/DELETE가 느리다고 조언했습니다.그것은 사실이지만, UPDATE와 DELETE의 많은 용도에는 WHERE 절도 있고 MySQL에서는 UPDATE와 DELETE도 JOIN을 지원합니다.인덱스는 인덱스 업데이트의 오버헤드를 보충하는 것보다 이러한 쿼리에 더 도움이 될 수 있습니다.

또한 InnoDB는 UPDATE 또는 DELETE의 영향을 받는 행을 잠급니다.행 수준의 잠금이라고 하지만 실제로는 인덱스 수준의 잠금입니다.검색 범위를 좁힐 수 있는 인덱스가 없는 경우 InnoDB는 변경할 특정 행보다 훨씬 더 많은 행을 잠가야 합니다.테이블 내의 모든 을 잠글 수도 있습니다.이러한 잠금은 논리적으로 충돌하지 않더라도 다른 클라이언트의 변경을 차단합니다.

인덱스를 추가하는 것은 언제가 좋을까요?

위의 경우 중 하나에서 인덱스의 이점을 얻을 수 있는 쿼리를 실행해야 하는 경우.

인덱스를 추가하는 것이 좋지 않은 때는 언제입니까?

색인이 다른 기존 색인의 왼쪽 접두사이거나 색인이 실행해야 하는 쿼리에 도움이 되지 않는 경우.

다중 인덱스와 다중 열 인덱스의 찬반 양론

경우에 따라 MySQL은 인덱스 병합 최적화를 수행하고 독립적인 인덱스 검색의 결과를 결합하거나 교차할 수 있습니다.그러나 단일 인덱스를 정의하면 성능이 향상되므로 인덱스 병합을 수행할 필요가 없습니다.

컨설팅 고객 중 한 명을 위해 인덱스가 없는 다대다 테이블에서 멀티컬럼 인덱스를 정의하여 가입 쿼리를 9400만 배 향상시켰습니다.

최적화가 필요한 쿼리를 기반으로 올바른 인덱스를 설계하는 것은 복잡한 프로세스입니다."모든 것을 인덱싱" 또는 "업데이트 속도가 느려지지 않도록 아무것도 인덱싱하지 않음"과 같은 광범위한 규칙을 만들지 마십시오.

인덱스 설계 방법 프레젠테이션도 참조하십시오.

지표가 너무 많은가요?

인덱스는 테이블, 응용 프로그램이 실행할 쿼리 등 당면한 문제에 의해 통지되어야 합니다.

인덱스의 속도가 빨라지는 것은 무엇입니까?

선택.

인덱스가 느려지는 것은 무엇입니까?

인덱스를 업데이트해야 하므로 삽입 속도가 느려집니다.

인덱스를 추가하는 것은 언제가 좋을까요?

응용 프로그램에 다른 WHERE 절이 필요한 경우.

인덱스를 추가하는 것이 좋지 않은 때는 언제입니까?

고유성 제약 조건을 쿼리하거나 적용하기 위해 필요하지 않은 경우.

다중 인덱스 대 다중 열 인덱스의 장단점?

난 질문이 이해가 안 가.여러 열을 포함하는 고유성 제약 조건이 있는 경우 반드시 이와 같이 모델링하십시오.

지표가 너무 많은가요?

네. 인덱스를 작성하기 위해 나가지 말고 필요에 따라 작성하십시오.

인덱스의 속도가 빨라지는 것은 무엇입니까?

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

인덱스가 느려지는 것은 무엇입니까?

인덱스된 테이블에 대한 INSERT 문장은 모두 느려집니다.이는 각 새 레코드의 인덱스가 필요하기 때문입니다.

인덱스를 추가하는 것은 언제가 좋을까요?

쿼리가 허용 가능한 속도로 실행되고 있지 않은 경우.클러스터화된 PK에 포함되지 않은 레코드로 필터링할 수 있습니다.이 경우 검색하는 필터를 기반으로 인덱스를 추가해야 합니다(퍼포먼스가 적절하다고 판단되는 경우).

인덱스를 추가하는 것이 좋지 않은 때는 언제입니까?

당신이 그것을 위해 그것을 할 때 - 즉, 과잉 최적화.

다중 인덱스와 다중 열 인덱스의 찬반 양론

개선하려는 쿼리에 따라 다릅니다.

지표가 너무 많은가요?

네, 다른 모든 것과 마찬가지로 인덱스가 너무 많으면 데이터 조작이 느려집니다.

인덱스를 추가하는 것은 언제가 좋을까요?

인덱스를 추가하는 좋은 방법은 쿼리가 너무 느릴 때(즉, 쿼리에 조인 수가 너무 많음)입니다.성능을 조정하려면 솔리드 모델을 구축한 후에만 이 최적화를 사용해야 합니다.

언급URL : https://stackoverflow.com/questions/4120160/mysql-too-many-indexes

반응형