Модель find () модели CakePHP не достигает индекса mysql b / c целочисленных строк - PullRequest
0 голосов
/ 07 марта 2012

При использовании кода, подобного следующему:

$Model->find('all', array(
  'conditions' => array(
    'field' => '1111'
  )
));

, где поле - это поле varchar, mysql генерирует запрос, подобный следующему:

SELECT * FROM Models WHERE field = 1111;

вместо ожидаемого

SELECT * FROM Models WHERE field = '1111';

Это также заставляет mysql приводить всю БД к int вместо использования строкового индекса.Я пытаюсь оптимизировать уже работающую систему, написанную кем-то другим, и быстрый всплеск показывает тысячи находок, которые мне нужно «исправить».Поэтому единственно приемлемым решением должен быть либо уровень модели, либо уровень mysql.

tl; dr: Как заставить Cake передавать целочисленные строки из условий в mysql как строки, а не как числа?

1 Ответ

0 голосов
/ 07 марта 2012

После исчерпания символов в комментарии.Должны ли вы действительно делать:

Оптимизация на уровне PHP (Cake).Обертки find () не идеальны.они невероятно мощные, но очень медленные.они допускают быструю разработку, но требуют больше запросов, чем необходимо.

, так что там вы должны попытаться исправить горлышко бутылки.БД, вероятно, (внутренне) по-прежнему самая быстрая часть в цепочке диспетчера - с приведениями или без них.

Чтобы получить более конкретную информацию:

  • используйте ручной запрос (), если вы чувствуете, что вы
  • пытаться использовать атомарные методы (updateAll, deleteAll), где это возможно
  • пытаться использовать сдерживаемое и связываемое поведение (особенно последнее), если вы используете вызовы find () с соединениями для сокращенияколичество запросов
  • кэширует ваши результаты БД как-то
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...