반응형
LIKE 절을 사용할 때 인덱스 예외를 적용하시겠습니까?
mysqli_report(MYSQLI_REPORT_ALL)
수정이 필요할 수 있는 경고 및 오류를 활성화합니다.★★MYSQLI_REPORT_INDEX
상속된 경우 PHP가 잘못된/인덱스 사용을 보고합니다.
테이블을 올바르게 설정했지만 LIKE 절을 사용하면 다음과 같은 예외가 발생합니다.
mysqli_sql_sql:쿼리/준비된 문에 사용된 인덱스가 없습니다(null).
다만, 「」를 사용하는 는, 「」를 합니다.=
LIKE
이 에러는 표시되지 않게 되었습니다.
이거 고칠 수 있어요?
내 테이블은 다음과 같습니다.
CREATE TABLE `articles` (
`ID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`Title` VARCHAR(255) NOT NULL COLLATE 'utf8mb4_unicode_ci',
PRIMARY KEY (`ID`),
INDEX `Title` (`Title`)
);
서버상에서 테스트하는 코드는 다음과 같습니다.
$db = mysqli_connect($Host, $User, $Pass, $Database);
$Stmt = mysqli_stmt_init($db);
// This works
mysqli_stmt_prepare($Stmt, 'SELECT ID FROM articles WHERE Title = ?');
$Title = 'test';
// This doesn't work
mysqli_stmt_prepare($Stmt, 'SELECT ID FROM articles WHERE Title LIKE ?');
$Title = '%test%';
mysqli_stmt_bind_param($Stmt, 's', $Title);
mysqli_stmt_execute($Stmt);
mysqli_stmt_bind_result($Stmt, $ID);
mysqli_stmt_fetch($Stmt);
mysqli_stmt_close($Stmt);
이것은 정상적인 동작입니다.
mysql 인덱스는 값의 왼쪽부터N글자를 인덱싱하여 동작합니다.
따라서 인덱스는 다음 작업을 수행할 때 사용되지 않습니다.
WHERE Title LIKE '%Test%'
그 이유는 대조하는 문자열이 와일드카드로 시작되기 때문입니다. 와일드카드는 가변 문자 수를 나타냅니다.
인덱스는 다음과 같은 경우에 사용됩니다.
WHERE Title LIKE 'Test%'
또는 물론:
WHERE Title = 'Test'
언급URL : https://stackoverflow.com/questions/53999386/index-exception-when-using-like-clause
반응형
'it-source' 카테고리의 다른 글
MySQL 기본 키 업데이트 중 (1) | 2022.10.21 |
---|---|
PHP에서 플랫폼 독립 디렉토리 구분자를 가져오려면 어떻게 해야 합니까? (0) | 2022.10.21 |
Laravel 웅변 ORM 트랜잭션 (0) | 2022.10.21 |
문자열로 PHP 클래스 인스턴스 만들기 (1) | 2022.10.21 |
Facebook은 브라우저의 통합 개발자 도구를 어떻게 비활성화합니까? (0) | 2022.10.21 |