Объясняю все подробно, чтоб больше ни у кого ни возникло никаких вопросов. У меня есть выборка из регистра, в котором есть поле типа Документ (общий тип документа). РЕЗУЛЬТАТ ВЫБОРКИ ИЗ РЕГИСТРА Я ЛОЖУ В ВИРТУАЛЬНУЮ ТАБЛИЦУ, ИМЕННО ЕЕ Я ИМЕЮ В ВИДУ ПОД СЛОВАМИ "ВЫБОРКА ИЗ РЕГИСТРА" ВПОСЛЕДСТВИИ (с рестром больше не работаю). Из-за того, что у нашего чудесного 13-тисимвольного поля тип неопределенный документ (Документ), длина данного поля не 9 символов (как должно быть), а 13, т.к. 1С прибавляет слева еще 4 символа, которые в свою очередь являются 36-тиричным значением IDDOCDEF (это был не код базы как я по ошибке предположил ранее!). А т.к. мне необходимо приджойнить журнал по IDDOC, то просто так этого сделать не получится. Отсюда есть 2 выхода:
1) прибавлять к IDDOC журнала 36-тиричное значение IDDOCDEF все того же журнала и пихать этот симбиоз в условие связывания ON моего джойна результата выборки из регистра с журналом по чудесному 13-символьному полю типа Документ (это сразу отмел, кто знает что такое перевод из 10-тичного числа в 36-тиричное, тем более реализованный на скуле, тот поймет почему);
2) отнимать от нашего 13-символьного поля регистра эти самые четыре символа и сделать с ним все тоже самое, что и с симбиозом в 1)-м пункте. На этом я и остановился.
Я знаю что поле IDDOC журнала длиной 9 символов, но для универсальности решил извлекать его длину через DATALENGTH и пихать результат в RIGHT. Получилось примерно такое условие связывания
...
ON RIGHT(#VT.ЧудесноеПолеДокумент, DATALENGTH(_1SJourn.IDDOC)) = _1SJourn.IDDOC
...
Так вот при такой постановке условия все работает ужасно медленно. А вот если вообще убрать DATALENGTH(_1SJourn.IDDOC) и поставить 9 или же
DECLARE @LENIDDOC int;
SET @LENIDDOC = (SELECT TOP 1 DATALENGTH(IDDOC) FROM _1SJourn);
SELECT
...
ON RIGHT(#VT.ЧудесноеПолеДокумент, @LENIDDOC) = _1SJourn.IDDOC
...
то все работает просто замечательно (секунд 10 вместо 5 минут). При чем ну тут непроиндексированность поля ЧудесноеПолеДокумент? Оно в обоих случаях участвует в запросе. Конечно можно предположить тогда, что поле IDDOC журнала 1C непроиндексировано, ведь именно его вместе с DATALENGTH мы исключаем во 2-м примере из основного запроса, но это полный бред. Здесь очевидно что все трмоза из-за DATALENGTH в условии связывания и ни о какой непроиндексации каких либо полей речи идти не может. Надеюсь все прояснилось?