我发现'SELECT'SQL查询中的'LIKE'运算符在pdo_sqlite(PHP 5.3或PHP 5.4)中速度很慢。
在sqlite3二进制文件中输入的相同查询速度更快。SQL查询中'LIKE'运算符的速度很慢,pdo_sqlite
示例代码:
<?php
$bdd = new PDO('sqlite:./chaines_centre.db');
$reponse = $bdd->prepare("select DateMonteeAuPlan, Debut, Fin, Statut from ReportJobs where NomJob = ? and NomChaine like 'DCLC257__' order by DateMonteeAuPlan DESC limit 20;");
$reponse->execute($_GET['job']);
while ($donnees = $reponse->fetch())
{
// whatever...
}
$reponse->closeCursor();
?>
这里是快速的 “风向标” 我做:
- XDebug的追踪 '上.timer' 的PDO_SQLITE措施
- SQLite的二进制,
NomChaine like 'DCLC257__'
:
●PDO_SQLITE:1.4521s✘
●sqlite3的二进制:0.084s✔
NomChaine like 'DCLC257%'
:
●PDO_SQLITE:1.4881s✘
●sqlite3的二进制:0.086s✔
NomChaine = 'DCLC25736'
:
●pdo_sqlite:0.002s✔(我认为它有点长,但非常快)
●sqlite3二进制:0.054s✔
我该如何改善这种情况?
编辑:也许我过于注重了 '喜欢' 操作。
<?php
$bdd = new PDO('sqlite:./chaines_centre.db');
$time_start = microtime(true);
$reponse = $bdd->query("select DateMonteeAuPlan, Debut, Fin, Statut from ReportJobs where NomJob = 'NSAVBASE' and NomChaine like 'DCLC257%' order by DateMonteeAuPlan DESC limit 20;");
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "Situation 1 : $time second(s)<br><br>";
// Output : 1.3900790214539 second(s)
$time_start = microtime(true);
$reponse = $bdd->query("select DateMonteeAuPlan, Debut, Fin, Statut from ReportJobs where NomJob = 'NSAVBASE' and NomChaine like 'DCLC257%' limit 20;");
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "Situation 2 : $time second(s)<br><br>";
// Output : 0.0030009746551514 seconde(s)
$time_start = microtime(true);
$reponse = $bdd->query("select DateMonteeAuPlan, Debut, Fin, Statut from ReportJobs where NomJob = 'NSAVBASE' and NomChaine = 'DCLC25736' order by DateMonteeAuPlan DESC limit 20;");
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "Situation 3 : $time second(s)<br><br>";
// Output : 0 seconde(s)
?>
通过消除LIKE
运营商或order by DateMonteeAuPlan
,查询是在预期的时间执行...
它是如此奇怪。 o_O
是NomChaine索引? – 2014-02-25 21:03:59
如果不是,那为什么只影响PDO? – Barmar
我编辑了我的第一篇文章,问题不是真的“'LIKE'运营商”相关。我在这张桌子上没有任何索引,但似乎没有问题。 – pihug12