MySql 쿼리에서 RegEx vs LIKE의 성능
소문에 의하면 다음과 같습니다.
SELECT * FROM lineage_string where lineage like '%179%' and lineage regexp '(^|/)179(/|$)'
이보다 더 빠릅니다.
SELECT * FROM lineage_string where lineage regexp '(^|/)179(/|$)'
누가 확인해 줄 수 있습니까?또는 그러한 쿼리의 속도를 테스트할 수 있는 적절한 방법을 알고 있어야 합니다.감사해요.
LIKE 조건이 정규식보다 더 빠르게 평가될 수 있기 때문에 대부분의 행이 테스트에 실패할 경우 더 빠를 수 있기 때문에 더 빠를 수 있습니다.그러나 성공한 행에 대해 하나만 실행하는 것이 아니라 두 개의 검정을 실행해야 하므로 대부분의 행이 성공한 경우에는 속도가 느려집니다.또한 최적화 도구가 먼저 실행되도록 선택하는 식에 따라 달라집니다.
다음과 같은 기능을 사용할 경우 속도가 더욱 빨라질 수 있습니다.
SELECT * FROM (
SELECT * FROM lineage_string
WHERE lineage LIKE '179%'
) WHERE lineage regexp '^179(/|$)'
LIKE '179%'는 검색 가능하므로 가능한 행을 찾는 데 인덱스를 사용할 수 있습니다.많은 행을 확인할 필요가 없습니다.
항상 그렇듯이 가장 확실한 방법은 실제 데이터에서 직접 측정하는 것입니다.
네, 아마 표준-SQL이라 조금 더 빠를 겁니다.LIKE는 풀온 정규 구문 분석기보다 간단한 비교 작업입니다.
그러나 실제로는 둘 다 지수를 사용할 수 없기 때문에 둘 다 정말 느립니다. (LIKE일치 문자열이 와일드카드로 시작하지 않는 경우 인덱스를 사용할 수 있지만 여기서는 그렇지 않습니다.)
만약 당신이 속도가 걱정된다면, 당신은 당신의 스키마를 바꾸어야 합니다.179모든 행에서 문자열을 수동으로 확인할 필요 없이 열에 직접 넣고 색인을 작성합니다.
언급URL : https://stackoverflow.com/questions/2740006/performance-of-regex-vs-like-in-mysql-queries
'programing' 카테고리의 다른 글
| MariaDB CONNECT 엔진에서 외부 파일 읽기 (0) | 2023.09.21 |
|---|---|
| 도커 명명 볼륨 위치 Mac (0) | 2023.09.21 |
| 하나의 행을 다른 테이블의 여러 행에 결합 (0) | 2023.09.21 |
| MySql은 두 개의 테이블을 동시에 업데이트합니다. (0) | 2023.09.21 |
| aria- expanded= "true"를 사용하여 CSS 속성을 변경하는 방법 (0) | 2023.09.21 |