2011-01-07 6 views
1

테이블에 대한 쿼리가 느립니다. 그것은이 절 같은 곳에 :MySQL MyISAM이 텍스트 컬럼 인덱싱

where supplier= 'Microsoft' 

열 유형이 텍스트입니다. phpmyadmin에서 나는 테이블에 인덱스를 추가 할 수 있는지를 보았지만 옵션은 비활성화되어 있습니다. 이것은 텍스트 컬럼을 색인 할 수 없다는 것을 의미합니까? 이것은 모든 업데이트 쿼리가 전체 테이블 스캔을 수행한다는 것을 의미합니까?

그러면 가장 좋은 방법은 열을 자체 테이블로 분리하고 현재 테이블에 ID를 놓고 인덱스를 배치하는 것입니까? 잠재적으로 쿼리 속도가 빨라 집니까?

+0

SE의 사용 프로필은 매우 예외적입니다. 득표 수는 낮으나 엄청난 수의 조회수입니다. 건배. –

답변

0

색인에 접두어 길이를 추가해야합니다. Column Indexes docs

다음에서 살펴 공급 업체 필드의 처음 50 바이트에 인덱스 생성 유무 :

mysql> create index supplier_ix on t(supplier(50)); 
Query OK, 0 rows affected (0.03 sec) 
Records: 0 Duplicates: 0 Warnings: 0 

을하지만 어쩌면 당신은 공급 업체의 데이터 유형을 다시 생각해야 하는가? 이름에서 판단, 그것은 길이가, 당신이 할 수있는보다 255 인 경우

+0

전체 테이블 스캔이 발생하지 않습니까? – Sally

+0

내가 '그렇다'고 말하면, 당신은 여전히 ​​당신이 선택한 데이터 타입을 다시 생각해 보시겠습니까? :) – Ronnis

0

당신은

select max(length(supplier)) from the_table; 

에 체크를해야한다 (그리고 당신이해야) ... 일반적인 텍스트 필드 같은 소리하지 않습니다 varchar (255)로 변환하고 그것에 인덱스를 작성하십시오.

올바른 데이터 유형을 선택하는 것이 더 중요합니다.

길이가 긴 경우 한정된 길이로 색인을 작성하면 도움이됩니다.

+0

이것은 나에게 14를 반환합니다. "일반"에서 varchar 열은 텍스트 열보다 더 잘 수행됩니다 (텍스트 열이 인덱싱 되더라도?). – Sally

+0

일반적으로 그렇습니다. 그리고 최대 65536 자의 VARCHAR를 사용할 수 있습니다. – Mchl

+0

... 모든 열의 문자 수는 65536 자입니다. 즉, 두 열이 각각 약 32765 바이트 길이가 될 수 있음을 의미합니다. (UTF는 3 바이트를 사용합니다.) – shantanuo

0

내가 올바르게 이해 했습니까? TEXT 열입니까? BLOB에 해당하는 유형 에서처럼? 이 열에 대해 VARCHAR을 고려하는 것이 좋습니다?

+0

여전히 varchar 열에서 전체 텍스트 검색을 수행 할 수 있습니까? – Sally

+0

가능합니다. 문제는 공급 업체의 이름이 포함 된 열에 대한 전체 텍스트 검색을 사용해야하는지 여부입니다. 'supplier = 'Microsoft'조건은 어쨌든 전체 텍스트 인덱스를 사용하지 않습니다. – Mchl

관련 문제