MySQL FIND_IN_SET이 준비된 명령문으로 인덱스를 활용할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-11-07 00:14:02
원래의
229명이 탐색했습니다.

Can MySQL FIND_IN_SET Leverage Indices with Prepared Statements?

MySQL FIND_IN_SET이 인덱스를 활용할 수 있나요?

데이터베이스 최적화 영역에서 인덱스는 쿼리 성능을 향상시키는 데 중요한 역할을 합니다. 그러나 쉼표로 구분된 문자열 내에서 값을 검색하는 데 일반적으로 사용되는 함수인 FIND_IN_SET은 인덱스 사용을 우회하여 성능이 저하되는 것으로 알려져 있습니다.

문자열 매개변수를 사용하여 인덱스 쿼리 달성

인식된 한계에도 불구하고 쉼표로 구분된 문자열을 처리하는 경우에도 색인 쿼리를 수행하는 것이 가능합니다. 문자열을 매개변수로 받아들이는 준비된 문을 활용하면 인덱스를 동적으로 활용하여 쿼리 효율성을 높일 수 있습니다.

준비된 문 만들기

CREATE PROCEDURE my_procedure(IN csv_str VARCHAR(255))
BEGIN
  SET @csv_list = CONCAT('(', csv_str, ')');
  SELECT * FROM users WHERE id IN @csv_list;
END
로그인 후 복사

이 저장 프로시저에서, 입력 매개변수 csv_str은 쉼표로 구분된 문자열의 소스 역할을 합니다. 연결을 사용하여 IN 절을 동적으로 구성하고 이를 @csv_list 세션 변수에 할당합니다.

Prepared 문 실행

특정 쉼표를 사용하여 준비된 문을 실행하려면- 문자열을 분리한 경우 다음 구문을 사용합니다.

CALL my_procedure('1,2,3');
로그인 후 복사

쿼리 최적화

준비된 문이 일단 실행되면 최적화 프로그램이 쿼리를 분석하고 활용하도록 트리거합니다. id 열의 인덱스입니다. 이 인덱스 사용법은 EXPLAIN 출력에서 ​​명백히 나타나 쿼리의 효율적인 실행을 보장합니다.

결론

FIND_IN_SET만으로는 본질적으로 인덱스를 사용하지 않지만 문자열이 포함된 준비된 명령문을 사용합니다. 매개변수를 사용하면 색인화된 쿼리를 얻을 수 있습니다. 이 기술은 FIND_IN_SET과 관련된 성능 단점을 피하고 최적의 쿼리 실행 시간을 제공합니다.

위 내용은 MySQL FIND_IN_SET이 준비된 명령문으로 인덱스를 활용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿