Почему, в таблице (modTemplateVarResource) изначально нет нужных индексов, задавать не буду — судя по всему, при работе в modx исключительно на уровне xpdo-объектов другие индексы (кроме тех, что имеются «в коробке»), и не нужны.
На счет возможной ненужности — в корне не правильное предположение. Все гораздо проще — это элементарный недосмотр. Повторяюсь: xPDO — это не база данных и даже не тонкий клиент, это просто средство формирования запросов со своими надстройками. Никакие собственные индексы он не умеет строить, использовать и т.п. Это все на совести базы данных.
А индексы правильные не настроены — это не единственная проблема. Элементарно — в разных таблицах в связанных полях не совпадают типы данных. К примеру в одной таблице id int(10)unsigned, а в другой таблице связанная колонка int(11) (не unsigned).
В этом плане в MODX действительно недосмотр большой. К слову, сборка ShopModxBox поставляется сразу с настроенными индексами ;)
И еще большая такая проблема в xPDO — отсутствует поддержка innoDB и транзакций. Сам Джейсон Ковард выражает свое неуважение к этим механизмам, типа они переоценены и не нужны. При этом в xPDO в этом плане большая проблема есть — двойное сохранение связанных объектов, и в случае использования вторичных ключей и транзакций, мы просто получим кучу сообщений об ошибках и сломанную логику. Но мы с Сергеем Прохоровым имеем в этом направлении серьезные наработки и исследования, так что с большой долей вероятности скоро отправим PR, который решает эти проблемы и позволит использовать транзакции. В больших проектах без транзакций просто никак. Когда у вас за раз сохраняется пара десятков связанных объектов, вы замахаетесь отлавливать ошибки и корректные откаты формировать без транзакций.