2009-12-14 5 views
31

varchar 열의 인덱스가 쿼리를 느리게 실행합니까? 내가 int로 만들 수 있습니다. LIKE % 비교를 수행 할 필요가 없습니다.Varchar의 인덱스가 성능 차이를 낳습니까?

+0

당신이 의미하는 것을 보여주는 샘플 쿼리를 보여주는 것은 어떻습니까? – wallyk

+2

"느린"것은 비교할 것이없는 의미가 없습니다. VARCHAR이 INT보다 느린 지 또는 인덱싱 된 VARCHAR이 인덱싱되지 않은 것보다 느린 지 묻는 중입니까? –

+0

이해가 안됩니다. 당신이 저장하는 데이터가 int 인 경우 열 유형이 int 여야하며 해당 열을 색인 할 것입니다. 데이터가 varchar이면 열 유형이 varchar – ram

답변

73

varchar 열의 인덱스가 쿼리를 더 느리게 실행합니까?

아니요.
최적화 프로그램이 인덱스 사용을 결정하면 쿼리가 더 빨리 실행됩니다. INSERT s/UPDATE s/DELETE s는 더 느리지 만주의할만한 수준은 아닙니다.

내가

사용주의하십시오에서 LIKE %의 비교를 수행 할 필요가 없습니다 :

LIKE '%whatever%' 

이 ... 인덱스를 사용하지하지만, 다음과 같은 뜻을 :

LIKE 'whatever%' 

키가 lefthan을 와일드 카드하고 있습니다. 문자열의 d면은 열의 색인을 사용할 수 없음을 의미합니다.

또한 MySQL limits the amount of space set aside for indexes을 알고 있습니다.이 테이블은 MyISAM (InnoDB의 경우 767 바이트) 테이블의 경우 최대 1000 바이트가 될 수 있습니다.

+4

감사합니다. 왼쪽 와일드 카드를 제거하면 색인을 사용한다는 것을 알지 못했습니다. 나는 와일드 카드가 전혀 지원되지 않을 것이라고 기대하지 않았다. – RevNoah

6

인덱싱을 사용하면 쿼리 속도가 느려지지 않으므로 데이터베이스 크기가 커집니다. 따라서 시도해보십시오.

행을 가져 오는 데 더 나은 성능을 얻을 수 있지만 데이터, 쿼리에 따라 달라집니다.

+11

입니다. 인덱싱 *은 삽입 속도를 저하 시키며 정기적으로 디스크를 치는 지점까지 데이터베이스 크기를 밀어 넣으면 성능이 완전히 저하 될 수 있습니다. –

+0

고맙습니다.네가 옳아! – YOU

2

색인을 생성하여 쿼리를 더 느리게 만들지는 않을 것입니다. 열을 int 유형으로 만들 수 있다면 대부분의 RDBMS에서 varchar보다 빠르게 int를 검색 할 수 있으므로이 방법을 사용하는 것이 좋습니다.

9

varchar 열을 정수로 바꿀 수있는 경우 (내가 생각하는 것처럼 생각합니다) 정수 열을 포함하는 인덱스는 몇 가지 이유로 varchar 열보다 더 잘 수행됩니다.

  1. 인덱스 크기가 작아지고 페이징 횟수가 줄어 듭니다.
  2. 정수 비교는 varchar보다 훨씬 좋습니다.
+1

point 2 -> 가장 많이 투표 된 답변에 나온 것처럼 LIKE 비교 이외에 색인을 생성 한 경우 어디에서 varchar 비교가 필요합니까? – shabby

+0

두 번째 포인트는 사실이 아닙니다. varchar를 인덱싱하면 해당 데이터베이스 엔진이 INT가됩니다. 오버 헤드 만 인덱스 스캔입니다. – Peter

0

삽입과 관련하여 성능 문제가 있습니다. varchar 열에 대한 인덱스가있는 큰 테이블에 삽입하는 것이 매우 느릴 수 있음을 확실히 말할 수 있습니다. (최대 50x)

관련 문제