2011-02-08 8 views
0

아주 많은 양의 원시 데이터로 채워질 데이터베이스를 MySQL에서 디자인하고 있습니다. 데이터를 삽입하기 전에 인덱스를 정의해야한다는 것을 알고 싶습니다. 아니면 먼저 데이터를 삽입 한 다음 인덱스를 만들어야합니까? 어떤 차이가 있습니까? 또한 알고 싶습니다. 2 열의 인덱스를 갖고 싶다면 별도로 또는 함께 인덱싱하는 것이 더 좋습니까? 감사합니다.MySql의 인덱스 생성 시간

답변

2

대량로드를 수행하는 경우, 제 생각에는 인덱스를 앞에 붙이지 않는 것이 좋습니다. 인덱스 페이지를 지속적으로 쓰도록로드가 느려지 며, 특히 큰 데이터 세트 인 경우 더욱 그렇습니다. 즉, 테이블이 채워진 후 SINGLE 문을 사용하여 하나씩 대신 모든 인덱스를 작성하십시오. 나는 오래 전에 어려운 길을 배웠다. 14 백만 행의 표가 있었고 15 개 이상의 색인을 작성해야했습니다. 각 지수는 마지막 지수보다 더 길어졌습니다. 새로운 색인이 나타날 때마다 이전의 페이지를 다시 작성해야했습니다. 한 번에 모두 그렇게하는 것이 훨씬 더 나은 것으로 판명되었습니다.

여러 열 인덱스의 경우 ... 쿼리가 수행되는 방식에 따라 다릅니다. 많은 쿼리가 WHERE 조건에서 한 쌍 이상의 열을 사용할 경우 예, 단일 인덱스에서 여러 열을 사용하십시오. 또한

+0

만약 내가 함께 색인을 만들고 한번 따로 따로 = 3 개의 색인을 가지고 있다면 그것은 나쁘고 높은 오버 헤드가 될까요? – Hossein

+2

실제로는 개별적으로 쿼리하지 않을 경우 불필요한 오버 헤드 일뿐입니다. – judda

1

먼저 데이터를 입력하십시오.

만약 두 개의 컬럼에 인덱스, 콤보 검색 또는 개인은 (정상 CIRC에서) 어느 것이 같이

idx_a (fldA + FLDB) idx_b (FLDB)

관련, // t

1

일반적으로 대량의 데이터 삽입 작업을 수행하는 경우 데이터를 삽입 할 때 색인을 유지하고 다시 작성할 필요가 없으므로 삽입 프로세스의 속도가 빨라집니다.

인덱싱 전략은 데이터베이스 쿼리 방법에 전적으로 달려 있습니다. 집합으로 질의하거나 (예 : where 절을 함께 사용) 또는 개인 (즉, where 절에서 하나 또는 다른 집합을 가짐)으로 쿼리 할 것입니까?

+0

내가 생각하는 세트를 쿼리합니다. – Hossein

+1

그런 다음 세트는 필요한 경우 색인 생성 (양방향) ... (field1, field2) 및 (field2, field1)이어야합니다. – judda

2

I 싶어이 2 열에 인덱스가있는 경우 내가 알고 싶어, 그것은 그들을 개별적으로 또는 함께 인덱스에 더 나은 무엇입니까?

이것은 검색어에 따라 다릅니다. 인덱스 (colA, colB)가있을 때 데이터베이스는 쿼리의 WHERE 조건에서 colA를 사용하지 않을 때이 인덱스를 사용할 수 없습니다. WHERE colB = ? 쿼리가있는 경우이 열로 시작하는 인덱스가 필요합니다. 인덱스의 열 순서 변경하는 경우 ...

WHERE colB = ?; 

을 :하지만

index (colB, colA); -- different order 
WHERE colb = ?; -- can use the index 
WHERE colA = ? AND colB = ?; -- can use the index 

을 그리고 지금이 사람이 사용할 수 없습니다

index (colA, colB); 
WHERE colA = ?; -- can use the index 
WHERE colA = ? AND colB = ?; -- can use the index 

이 하나가 실패합니다 색인 :

WHERE colA = ?; 

검색어를 확인하려면을 사용하십시오.그리고 꼭 필요한 인덱스 만 생성하십시오.

+0

어디 colA =? 및 colB =?; - 인덱스 (colB, colA)를 사용하지 않는 인덱스 <-를 사용할 수 있습니다. 인덱스가 필요합니다 (colA, colB) – judda

+1

@judda : WHERE colA =? 및 colB =?; 정확히 어디 colB = 동일합니까? 및 colA =?; MySQL이 양쪽 모두에 인덱스를 사용할 수 없다면, 최적화 프로그램에 심각한 버그가 있습니다. 설명하면 알 수 있습니다. –

+0

일부 옵티 마이저의 경우 두 방법 모두 다르게 취급되므로 두 방법을 모두 인덱싱해야한다는 것을 알고 있습니다. mysql에 대해서는 100 % 확실하지 않습니다. 옵티마이 저는 필요에 따라 주위를 스왑 할 수 있지만 그렇지 않을 수 있습니다. http://explainextended.com/2010/05/19/things-sql-needs-determining-range-cardinality/는 인덱스에 대한 의사 관련 설명이며 이들이 mysql에서 어떻게 작동 하는지를 설명합니다. – judda