2013-06-18 2 views
0

꽤 큰 테이블 (페이스 북 규모가 아니지만 백만 행 정도)에서 일부 MySQL 쿼리를 실행 중이며 매우 느리게 찾습니다. 그 이유는 내가 id 필드에서 쿼리하고 있지만 그 id이 기본 키로 선언되지 않았으며 인덱스가 선언되지 않았기 때문입니다. 나는 id 필드에 인덱스를 추가 할 alter table을 할 경우 그 카디 나리는, 이러한 상황에서 1로 아주 가까이 있지만이 고유하지 않기 때문에비 기본 키 열에서의 MySQL 인덱싱

나는 생각입니다, 기본 키에 id 필드를 설정할 수 없습니다 기본 키가 아니므로 쿼리 속도를 높이려면?

그렇다면 인덱스가 완전히 개발되어 쿼리가 빠르게 실행되기까지 얼마나 걸릴 것입니까? 즉, alter table을 실행 한 후에 프롬프트가 나타나거나 프롬프트가 표시 되더라도 인덱스 건물이 상당 기간 동안 내부적으로 계속 진행되는 것입니까? (고유하지 않은 필드에 대한 색인을 선언하면 DB가 손상되는지 여부가 확실하지 않기 때문에 요청하기 전에 묻습니다.)

답변

1

모든 색인은 해당 열과 일치하는 쿼리의 속도를 높입니다. 이와 관련하여 기본 키와 다른 인덱스 간에는 큰 차이가 없습니다.

ALTER TABLE 쿼리를 실행하면 색인이 즉시 생성됩니다. 프롬프트가 돌아 오면 인덱스가 있으며 사용됩니다. 이런 일이 일어나고있는 동안 부패는 없습니다.

+0

차가움. 그래서 제 경우에는 카디널리티가 1에 가까울 것이므로 인덱스는 기본 키 필드만큼 잘 작동합니다. 맞습니까? 중요한 성능 저하가 발생합니까? 그리고 색인 생성이 정교한 프로세스가 아닌가? 어떻게 즉시 처리 할 수 ​​있습니까? – SexyBeast

+0

기본 키로 사용하는 것이 의미가 있는지 여부는 응용 프로그램에 따라 다릅니다. 나는 색인이 즉시 생성되는 것이 아니라 순간적으로 생성된다고 말했다. 테이블이 크면 시간이 걸리지 만, 끝날 때까지 프롬프트를 다시 얻지는 못합니다. 단지 백그라운드 작업을 시작하는 것이 아닙니다. – Barmar

+0

오, 그럼. 고마워요! – SexyBeast