Может ли PDO bindParam () или bindValue () заставить БД выполнять мягкий анализ? - PullRequest
0 голосов
/ 10 октября 2019

С PHP я пытаюсь выполнить много запросов с циклом PDO в for, и я хочу, чтобы оптимизатор DB выполнял мягкий синтаксический анализ.

Сейчас я связываю параметры, но я неуверен, что оптимизатор действительно использует мягкий анализ.

Пример запроса

select * from table as t where t.id = :id ;

PHP код

$query = "select * from table as t where t.id = :id ;"
$pdo->prepare($query);
$id = 0;
$query->bindParam(':id', $id, PDO::PARAM_INT);
for($id; $id<10; $id++){
    $query->execute()
}

1 Ответ

1 голос
/ 10 октября 2019

Не уверен, что я понимаю, что такое мягкий синтаксический анализ, но запрос в вашем случае анализируется только один раз, что, вероятно, является тем, о чем вы спрашиваете.

Пара замечаний.

  1. Необходимо убедиться, что режим эмуляции отключен .
  2. С таким простым запросом вы вряд ли заметите улучшение производительности. В настоящее время синтаксический анализ действительно быстрый.
  3. Хотя я понимаю, что ваш запрос является лишь примером, тем не менее, вместо выполнения запроса SELECT в цикле, будет лучше собрать всеидентифицирует в IN() предложение в одном запросе или, если применимо, использует JOIN.
  4. , выполняющий несколько похожих запросов, довольно оправдан с помощью операторов DML. В таком случае, если вы беспокоитесь о производительности, я бы посоветовал обернуть все запросы в транзакции, в некоторых случаях это может значительно повысить скорость
...