Php 使用LIKE子句时索引异常?

Php 使用LIKE子句时索引异常?,php,mysql,mysqli,mariadb,Php,Mysql,Mysqli,Mariadb,我正在我的服务器上调用mysqli\u report(mysqli\u report\u ALL),以启用可能需要修复的任何警告和错误。由于继承了MYSQLI\u REPORT\u INDEX,PHP也被继承 我已正确设置了表,但使用LIKE子句时仍会出现以下异常: mysqli_sql_异常:查询/准备语句中未使用索引(null) 但是,当使用=而不是像那样使用时,我不再收到此错误 这能修好吗 我的桌子看起来像这样: CREATE TABLE `articles` ( `ID` INT

我正在我的服务器上调用
mysqli\u report(mysqli\u report\u ALL)
,以启用可能需要修复的任何警告和错误。由于继承了
MYSQLI\u REPORT\u INDEX
,PHP也被继承

我已正确设置了表,但使用LIKE子句时仍会出现以下异常:

mysqli_sql_异常:查询/准备语句中未使用索引(null)

但是,当使用
=
而不是像
那样使用
时,我不再收到此错误

这能修好吗

我的桌子看起来像这样:

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'

在大多数情况下,
标题如“Test”
(无通配符)被优化为
标题=“Test”