В настоящее время у меня есть запрос внутри цикла, как показано ниже.
<cfloop query="Superquery">
<cfquery datasource="mysource" name="getData">
SELECT col1, Col2
FROM myData
where col1 = #Superquery.IDCol#
</cfquery>
<!--- Some Processing --->
</cfloop>
Запрос не возвращает много данных. В некоторых случаях он возвращает менее 100 строк, а в некоторых может возвращать около 5000 строк. Но так как он находится внутри цикла и количество итераций может превышать 100, это заставляет меня задуматься о лучшем подходе к оптимизации.
Подход 1. Использование запроса запросов
<cfquery datasource="mysource" name="getAllData">
SELECT col1, Col2
FROM myData
</cfquery>
<cfloop query="Superquery">
<cfquery dbtype="query" name="getData">
SELECT col1, Col2
FROM getAllData
where col1 = #Superquery.IDCol#
</cfquery>
<!--- Some Processing --->
</cfloop>
Подход 2. Используйте структуры
Вне цикла у меня есть запрос getAllData в соответствии с подходом 1 и создание структуры с ключом как «col1» и значением как «col2». Внутри цикла я использую структуру, созданную вне цикла, для выполнения необходимой обработки.
Я не уверен, имеет ли это значение в производительности между двумя подходами. Однако подход 1 легко реализовать. :) Просто думал получить некоторые предложения. Любые другие эффективные подходы приветствуются.
Спасибо!!
JOIN
или что-то в этом роде. Подход 1 просто требует проблем с производительностью и использованием памяти. (Кроме того, если вы настаиваете на одном, используйте<cfqueryparam>
- person James A Mohler   schedule 06.05.2015JOINS
- person Scott Stroz   schedule 06.05.2015