많은 수의 행을 쿼리할 때 LIKE 연산자의 대안은 무엇입니까?
P粉191610580
2023-09-02 13:02:15
<p>다음과 같은 임의의 문자열을 저장하는 열이 있는 테이블이 있습니다. </p>
<pre class="brush:php;toolbar:false;">example_id = qwhs77gt65g7*</pre>
<p>이제 열의 일부 데이터에는 별표(*)가 표시되지만 다른 데이터에는 표시되지 않습니다. </p>
<p>다음 항목을 선택해야 합니다. 저는 다음 검색어를 사용하고 있습니다: </p>
<pre class="brush:php;toolbar:false;">example_tbl에서 example_id를 선택하세요. WHERE example_id LIKE '%*%'</pre>
<p>이것은 일반적으로 문제가 되지 않지만 수백만 개의 행을 쿼리하고 있는데 제가 알 수 있는 바에 따르면 LIKE 연산자가 성능에 영향을 미치고 있습니다. 쿼리를 완료하는 데 몇 시간 정도 걸립니다</p>
<p>제 질문은 LIKE 연산자의 대안이 무엇입니까?입니다. </p>
<p>PS 별표는 항상 문자열 끝에 있습니다. 도움이 되었는지 잘 모르겠습니다</p>
당신이 "별표는 항상 끝에 있습니다"라고 언급했으므로 시도해 볼 수 있습니다
其中 example_id LIKE '%*'
.이렇게 하면 "*"로 끝나는 모든 값을 찾을 수 있습니다.
또는
은 테이블의 열에서 하위 문자열을 검색하는 것입니다.
이를 달성하는 한 가지 방법은 3개의 매개변수를 사용하는 instr() 함수를 사용하는 것입니다.
Syntax: instr(순위, 문자열, 하위 문자열)
랭킹:
이제 이것을 테이블에 어떻게 적용할까요? instr() 함수는 x3이므로 적용이 간단하다.
예: filter[ZCT] where instr(1,ALLOTEDTO,"Ram") 0.
여기서 1은 하위 문자열을 찾기 위한 시작 위치이고, ALLOTEDTO는 문자열로 구성된 열 이름이며, 마지막 매개 변수는 하위 문자열 자체입니다. 그러면 ALLOTEDTO 열에 하위 문자열 "Ram"이 포함된 테이블의 모든 레코드가 제공됩니다
이것은 다음과 같습니다.
ALLOTEDTO가 "%Ram%"와 유사한 ZCT에서 *를 선택하세요.
NOTE: Instr() 함수는 대소문자를 구분하므로 항상 대문자나 소문자 기능을 사용하세요.