Насколько более эффективно создание набора записей с помощью newquery против объединения и подключения к базе данных? - PullRequest
1 голос
/ 28 марта 2011

Насколько эффективнее создание запроса с использованием queryNew ()? Недавно я наткнулся на код, создающий вызов db для «фиктивного запроса», который не соединяется ни с одной таблицей, подобной этой:

<CFQUERY NAME="IncludeList" ....>
Select 0 as code, 'Exclude' as description
UNION ALL
Select 1 as code, 'Include' as description
</CFQUERY>

VS

<cfset IncludeList = queryNew("code, description","Integer, VarChar")>
<cfset newrow = queryaddrow(IncludeList, 2)>
<cfset temp = querysetcell(IncludeList, "code", 0, 1)>
<cfset temp = querysetcell(IncludeList, "description", "Exclude", 1)>
<cfset temp = querysetcell(IncludeList, "code", 1, 2)>
<cfset temp = querysetcell(IncludeList, "description", "Include", 2)>

Ответы [ 3 ]

2 голосов
/ 28 марта 2011

Избегайте соединений с базой данных.

Для QofQ (то есть dbtype="query"), хотя это кажется хорошей идеей, на практике я видел сбой при нагрузке на серверы, когда все запросы попадали в один и тот же QofQ.Основываясь на трассировке стека, представляется реализация отдельных потоков QofQ, блокирующая другие потоки.

С другой стороны, у меня также есть код, выполняющий querySetCell(), и это не было проблемой производительности.

1 голос
/ 28 марта 2011

Ограничение вызовов базы данных всегда должно быть предпочтительным.

0 голосов
/ 29 марта 2011

Я бы предпочел использовать QueryNew вместо QoQ.Это даст вам больше гибкости в долгосрочной перспективе.

Кстати, вы знаете, что вам не нужно присваивать такие функции, как querysetcell, для «временной» переменной:

<cfset temp = querysetcell(IncludeList, "code", 0, 1)>

Вы можете просто сделать:

<cfset querysetcell(IncludeList, "code", 0, 1)>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...