2012-09-04 19 views
0

고객 목록이 있습니다. 대략 있습니다. 그 테이블에 2 백만의 기록이 있습니다. 테이블의 구조는 다음과 같습니다.데이터베이스 테이블 최적화

ID (int), FLM, 전자 메일, 주소, 전화, BDAy; BDay를 제외한 각각의 nvarchar 유형

ID가 아닌 두 개의 인덱스와 FLM 열이 있습니다.

과 같은 쿼리를 실행하면
SELECT * FROM tbl where FLM LIKE 'value' 

약 지연이 발생합니다. 1 분. 따라서 질문 :

  • FLM에서 클러스터 된 인덱스를 추가하면 성능이 변경됩니까?
  • 내가 여기에서 최적화 할 수있는 기타 항목은 무엇입니까?

프로그램의 결과는 어떻게 얻을 수 있습니까? SqlConnection을 사용하여 SQlCommand 개체에 쿼리를 지정한 다음 DataReader을 통해 데이터를 가져옵니다. 어쩌면 여기서 더 나은 결과를 얻기 위해 이것을 최적화 할 수 있습니다 (어쩌면 데이터 집합을 사용하여)?

+1

값에는 어떤 형식이 사용됩니까? 와일드 카드'% % % '를 사용하고 있습니까? "쇼 계획"은 무엇을 보여줍니까? 패턴에서 초기 %를 사용하는 경우 테이블 스캔이 발생하고있는 것으로 판단됩니다. – Ben

+0

예, 나는 와일드 카드를 사용하고 있습니다. 하지만 와일드 카드를 사용하지 않더라도 오랫동안 기다려야합니다. – seeker

+0

일반적으로 테이블에는 클러스터 된 인덱스가 있어야합니다. 고유 한 행이 가장 많고 증분되는 열에 클러스터 된 인덱스를 만들어야합니다. 또한 클러스터 된 인덱스가 넓어서는 안되기 때문에 문자열 열에서 클러스터 된 인덱스를 사용하지 마십시오. – sqlhdv

답변

0

ID를 클러스터되지 않은 색인이 아닌 클러스터 된 색인으로 지정하십시오. 게시 한 쿼리 만 고려하면 FLM 열의 클러스터되지 않은 인덱스는 아무 것도하지 않으므로 제거 할 수 있습니다.

클러스터 된 인덱스를 사용하면 성능이 향상되기를 바랍니다.