문제

SQL의 복잡성이 무엇인지 아는 사람이 있습니까? LIKE 가장 인기있는 데이터베이스의 운영자?

도움이 되었습니까?

해결책

세 가지 핵심 사례를 별도로 고려해 봅시다. 이 논의는 MySQL 별이지만 인덱스가 일반적으로 유사한 방식으로 구현되기 때문에 다른 DBMS에도 적용될 수 있습니다.

LIKE 'foo%' 인덱스 된 열에서 실행되면 빠릅니다. MySQL 인덱스는 B- 트리의 변형 이므로이 쿼리를 수행 할 때는 트리를 다음에 해당하는 노드로 내려갈 수 있습니다. foo, 또는 해당 접두사가있는 첫 번째 노드를 사용하여 트리를 앞으로 횡 방향으로 이동시킵니다. 이 모든 것이 매우 효율적입니다.

LIKE '%foo' 인덱스로 가속화 할 수 없으며 전체 테이블 스캔을 초래합니다. 인덱스를 사용하여 실행할 수있는 다른 기준이있는 경우, 초기 필터링 후에 남아있는 행만 스캔합니다.

그래도 속임수가 있습니다: 접미사 일치 해야하는 경우 - 확장자가있는 파일 이름 검색 .foo, 예를 들어 - 원래 내용과 동일한 내용과 동일한 열을 추가하지만 캐릭터를 역 순서로 추가하여 동일한 성능을 달성 할 수 있습니다.

ALTER TABLE my_table ADD COLUMN col_reverse VARCHAR (256) NOT NULL;
ALTER TABLE my_table ADD INDEX idx_col_reverse (col_reverse);
UPDATE my_table SET col_reverse = REVERSE(col);

로 행을 검색합니다 col.foo 그런 다음 :

SELECT * FROM my_table WHERE col_reverse LIKE 'oof.%'

마지막으로, 거기에 있습니다 LIKE '%foo%', 단축키가없는 것. 행의 양을 실행 가능한 숫자로 줄이는 다른 제한 기준이 없다면, 성능이 어려워집니다. 대신 전체 텍스트 검색 솔루션 또는 다른 특수 솔루션을 고려할 수 있습니다.

다른 팁

If you are asking about the performance impact:

The problem of like is that it keeps the database from using an index. On Oracle I think it doesn't use indexes anymore (but I'm still on Oracle 9). SqlServer uses indexes if the wildcard is only at the end. I don't know about other databases.

Depends on the RDBMS, the data (and possibly size of data), indexes and how the LIKE is used (with or without prefix wildcard)!

You are asking too general a question.

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