Windows 데스크탑 검색 - SQL 믿을 수없는 느린 느린 '%검색%'

StackOverflow https://stackoverflow.com/questions/1541511

  •  20-09-2019
  •  | 
  •  

문제

SQL을 사용하여 Windows 데스크탑 검색 API를 쿼리하려고합니다.

나는 Windows 7 Search GUI를 정말로 싫어한다고 말하면서 내 자신의 글을 쓰기로 결정했습니다. 많은 파일이 색인화되어 있으며 (약 1.000.000) 이름을 검색하고 싶습니다. 같은 것 : "토끼"가 포함 된 모든 이름을 보여주세요.

그러나 여기서 나는 성능 문제가 발생합니다. 검색

SELECT "System.ItemPathDisplay" 
FROM "SystemIndex" 
WHERE System.FileName LIKE 'egon%'

정말 빠릅니다. 또한 %egon 대안. 하지만 %egon% 영원히 걸립니다. 그것이 색인의 본질에 있는지 (가능성이 엄청나게 증가한다는 것을 이해합니다) 또는 내가 뭔가 잘못하고 있는지 확실하지 않습니다.

질문은 ~이야:

  • Windows 인덱스가 큰 SQL 데이터베이스 인 것이 맞습니까?
  • 그렇다면 DB의 구조에 대한 정확한 정보 (1 차 키, 인덱스)를 어디에서 찾을 수 있습니까?

내가 가지고 있다면 기본적으로 SQL을 최적화합니다.

대체 질문 : 누구든지 모든 파일을 찾기 위해 빠른 SQL 문을 알고 있습니까? 에곤 이름의 어딘가.

편집 : 검색 GUI가 마음에 들지 않는 이유

글쎄, 그것은 XP에 비해 직관적이지 않습니다. 개를 비활성화하고 이전 XP 인터페이스를 사용하는 경우 다음과 같은 검색 쿼리를 만들 수 있습니다.

  • 1 개월 이상의 모든 파일
  • 10MB보다 큽니다
  • 이름 패턴 *_homework_*.docx

구문을 "학습"하지 않고 Windows 7에서 시도해보십시오. 그리고 지옥, 나는한다 ~ 아니다 하나의 파일을 찾기 위해 다른 구문을 배우고 싶습니다.

다른 주요 문제는 아마도 내 검색 습관 일 것입니다. 대부분의 경우 파일 이름 (또는 부품)을 알고 있으며 단순히 위치를 원합니다. 그리고 이런 식으로 검색을 사용하면 몇 가지 문제가 발생했습니다.

  • 우선, 당신은 항상 이름으로 그것을 접두사해야합니다.
  • 그런 다음 폴더 이름 레이아웃이 바보입니다 (부모 폴더로 주문 중이며 전체 경로가 아닙니다. 생각한다, 왜냐하면 .. Tada ... 다음 요점 참조)
  • 그런 다음 더 성가신 결과, 결과 목록이 있고 결과를 분류하려고하면 영원히 걸립니다.

그리고 지금 나는 내 시스템에 버그가 있다고 생각합니다. 나는 그것을 빨리 확인하려고 노력했고, "테스트"를 위해 평균 크기 폴더에서 검색했고 일부 파일을 찾았습니다. 그런 다음 나는 폴더를 정렬하려고 시도했고 (내 두 번째 포인트를 확인하기 위해) 이제 그는 영원히 검색하고 있습니다 ... 나는 정말로, 나는 "안녕하세요"라는 단어를 찾으려고 노력하는 동안 ... 오, 끝났습니다 - 그는 끝났습니다. 약 20 개의 파일을 찾았습니다. 그래서, 이제 무언가를 시도해 보자 .... 좋아, 이제 그가 회복 한 것처럼 보인다 .. 그러나 여전히 내 취향을 느리게하기 위해 ...

그래서 검색에 대한 충분한 저주 :-)

도움이 되었습니까?

해결책

이름으로 인덱스를 구축하는 것처럼 보이므로 문자열의 시작을 지정하는 한 인덱스를 사용할 수 있지만 그렇지 않은 경우 테이블 스캔을 사용해야합니다.

Microsoft의 전체 텍스트 검색 엔진을 사용하고 있다고 가정 한 다음 다음과 같은 것을 사용해보십시오.
... System.Filename이 'Egon'을 포함하는 곳

기본적으로 두 가지 선택이 있습니다. 유효하지 않기 때문에 거부됩니다 (즉,이 SQL 인터페이스는 FT 검색 확장을 지원하지 않음). 그렇지 않으면 훨씬 더 빠릅니다.

편집 : oops- 구문은 "contains (system.filename, 'egon')"여야합니다. 죄송합니다.

다른 팁

시도해 볼 수도 있습니다

"SELECT \"System.ItemPathDisplay\" FROM \"SystemIndex\" WHERE CONTAINS(System.FileName, 'egon')";

색인을 사용할 수 없기 때문에 느리게됩니다. 그 이유는 문자열의 시작이 아닌 문자열의 일치를 검색하고 있기 때문에 내용의 전체 테이블을 스캔해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top