복붙노트

[SQL] MySQL은 - 왜 인덱스 모든 분야?

SQL

MySQL은 - 왜 인덱스 모든 분야?

최근에 나는 인덱스의 경이를 배운 및 성능이 크게 향상되었습니다. 내가 배운 모두와 함께 그러나, 나는이 질문에 대한 답을 찾을 수 없습니다.

인덱스는 중대하다, 그러나 왜 누군가 단지 지수는 모든 필드는 믿을 수 없을만큼 빠른 테이블을 만들 수 없었다? 나는 확실히이 작업을 수행 할 수있는 좋은 이유가 있어요,하지만 어떻게 서른 필드 테이블에 세 필드에 대한? 30 분야에서 10? 어디 하나는 라인, 그리고 왜 그리해야합니까?

해결법

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

    1.인덱스는 메모리 (RAM)의 공간을 차지합니다; 너무 많은 또는 인덱스의 너무 큰 및 DB는에와 디스크에서 교환해야 할 것입니다. 그들은 또한 삽입 및 삭제 시간을 증가 (각 인덱스 업데이트 / 삭제 / 삽입 된 데이터의 모든 부분에 대한 업데이트해야합니다).

    인덱스는 메모리 (RAM)의 공간을 차지합니다; 너무 많은 또는 인덱스의 너무 큰 및 DB는에와 디스크에서 교환해야 할 것입니다. 그들은 또한 삽입 및 삭제 시간을 증가 (각 인덱스 업데이트 / 삭제 / 삽입 된 데이터의 모든 부분에 대한 업데이트해야합니다).

    당신은 무한한 메모리를 필요가 없습니다. 모든 인덱스는 RAM = 좋은에 맞게 있도록 만들기.

    당신은 무한한 시간이 없어. 만 열을 인덱싱하면 인덱스 최소화를 삽입 / 삭제 / 업데이트 성능 저하가 필요합니다.

  2. ==============================

    2.모든 인덱스, 행이 업데이트 될 때마다 업데이트 삽입 또는 삭제해야 함을 명심하십시오. 당신이 가지고있는 이상의 인덱스 그래서, 느린 성능 당신은 쓰기 작업해야합니다.

    모든 인덱스, 행이 업데이트 될 때마다 업데이트 삽입 또는 삭제해야 함을 명심하십시오. 당신이 가지고있는 이상의 인덱스 그래서, 느린 성능 당신은 쓰기 작업해야합니다.

    잠재적으로 느린뿐만 아니라 작업을 읽을 수 있도록 또한, 모든 지수 (큰 테이블), 추가 디스크 공간과 (전화) 메모리 공간을 차지합니다. 이것 좀 봐

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

    3.당신은 CRUD의 요구를 균형을해야합니다. 테이블에 쓰기 느려집니다. 라인을 묘화하는 장소에 관해서는, 그 데이터 (등 필터링 정렬) acessed되는 방법에 의존한다.

    당신은 CRUD의 요구를 균형을해야합니다. 테이블에 쓰기 느려집니다. 라인을 묘화하는 장소에 관해서는, 그 데이터 (등 필터링 정렬) acessed되는 방법에 의존한다.

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

    4.인덱싱 드라이브와 램에서 모두 더 할당 된 공간을 차지, 또한 성능이 많이 개선됩니다. 이 메모리 한계에 도달 불행하게도 때, 시스템은 드라이브 공간을 포기하고 성능을 위험합니다. 실제로, 당신은 당신이 생각하는 것을하지 인덱스 모든 필드는 데이터 알고리즘을 통과하지 말며 삽입하거나 (WHERE 절을) 검색의 모든 종류에 포함되지 않습니다해야합니다. 하지만, 그렇지 않으면해야한다. 기본적으로 당신은 인덱스 모든 필드를해야합니다. 쿼리는 운영자에 의해 사용되는 경우가 너무 속도에 필요한 경우가 아니면 unindexing 고려해야 필드이며,

    인덱싱 드라이브와 램에서 모두 더 할당 된 공간을 차지, 또한 성능이 많이 개선됩니다. 이 메모리 한계에 도달 불행하게도 때, 시스템은 드라이브 공간을 포기하고 성능을 위험합니다. 실제로, 당신은 당신이 생각하는 것을하지 인덱스 모든 필드는 데이터 알고리즘을 통과하지 말며 삽입하거나 (WHERE 절을) 검색의 모든 종류에 포함되지 않습니다해야합니다. 하지만, 그렇지 않으면해야한다. 기본적으로 당신은 인덱스 모든 필드를해야합니다. 쿼리는 운영자에 의해 사용되는 경우가 너무 속도에 필요한 경우가 아니면 unindexing 고려해야 필드이며,

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

    5.그것은 인덱스 테이블의 모든 열을 좋은 생각이 아니다. 이 읽기에 매우 빠른 테이블을 만들 것입니다하지만, 그것은 또한 쓰기에 훨씬 느려집니다. 해당 테이블에 새 레코드를 넣어 다음 자신의 인덱스 테이블의 각 컬럼의 정보를 넣어 포함 할 색인 모든 열이있는 테이블에 쓰기.

    그것은 인덱스 테이블의 모든 열을 좋은 생각이 아니다. 이 읽기에 매우 빠른 테이블을 만들 것입니다하지만, 그것은 또한 쓰기에 훨씬 느려집니다. 해당 테이블에 새 레코드를 넣어 다음 자신의 인덱스 테이블의 각 컬럼의 정보를 넣어 포함 할 색인 모든 열이있는 테이블에 쓰기.

  6. ==============================

    6.이 대답은 내 개인적인 의견 내가 대답에 내 수학적 논리를 사용하고 있습니다 기반으로

    이 대답은 내 개인적인 의견 내가 대답에 내 수학적 논리를 사용하고 있습니다 기반으로

    우리는 L 새로운 인덱스 테이블을 얻을 것이다 우리 인덱스 모든 필드 경우 두 번째 질문은, 먼저 몇 가지 수학적 계산을 할 수 있도록 중지 경계에 있었다, 우리는 테이블에 L 필드와 N 행이 있다고 가정 어디 모든 테이블 것이다 종류의 meaningfull 방법은 테이블은 2 100 큰 테이블이있는 경우 테이블 번호가 어디에 (이미 프로젝트에서 일 (1 테라 2 테라 될 것입니다) * (W)가 될 것 W 무게 첫 눈에 인덱스 필드의 데이터 인 경우 100 번이 공간 (100 TERA)을 낭비) 1800 표를 arround를,이 방법이 훨씬 현명에서입니다.

    우리는 모든 테이블에 인덱스를 적용 할 경우, 우리는 인덱스 업데이트에 대해 생각해야합니다 모든 인덱스 업데이트 하나의 업데이트 트리거이이 시간에 모든 정렬되지 않은 상응하는 선택입니다했다

    이에서 난 당신이 시간을 잃어 버리게된다 경우 다른 모든 필드를 선택 당신이 실행되지 않습니다 인덱싱되지 않은 필드를 선택한다면 있기 때문에 선택이나 업데이트에 그것을 잃을 것이 바람직하다 것을이 시나리오에서이 결론 인덱싱되지

    어떤 인덱스에?

    외국 키 : 필수가 기반으로

    기본 키 : 누군가는이 사건에 도움을 줄 수 읽으면 나는 그것에 대해 아직 잘 모르겠어요있을 수 있습니다

    다른 필드 : 첫 번째 자연의 대답은 나머지 filds의 절반 이유 : 당신은 지수보다 당신이 가장 좋은 대답에서 멀지 않은 r에하는 경우는 만약 당신이해야 인덱스 적은 우리가 인덱스 나쁜 모든 인덱스 없다는 것을 알고 있기 때문에 그렇지도 멀리 또한 나쁘다.

    이 3 점에서 우리는 K 키 이루어지는 L 필드를 가지면 한계 부근 어딘가에 ((L-K) / 2) + K되어야한다고 결론 지을 수 다소간 L / 10만큼

    이 대답은 내 논리와 개인 prictices을 기반으로

  7. from https://stackoverflow.com/questions/5446124/mysql-why-not-index-every-field by cc-by-sa and MIT license