Должен ли я использовать «maxrows» в моем запросе? ColdFusion / SQL - PullRequest
1 голос
/ 10 марта 2011

Необходимо ли использовать maxrows = "1" при поиске строки с числовым первичным ключом?

<cfquery maxrows="1">  
   select *
   from table
   where RowID = #NumericVariable#
</cfquery>

Есть ли у ColdFusion какая-либо привязка SQL или что-то еще, что делает ее лучше / быстрее/ Выше, если максры включены или исключены?

Ответы [ 4 ]

4 голосов
/ 11 марта 2011

номер

Если таблица структурирована правильно (т. Е. Поле, которое вы ограничиваете, является первичным ключом), тогда ограничение одним будет излишним. По определению первичный ключ однозначно идентифицирует одну строку.

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

maxrows ограничивает количество результатов в переменной запроса после ее возвращения из базы данных.

Если вы возвращаете только один результат, это никак не повлияет на производительность вашего запроса.

ColdFusion позволяет передавать параметры связывания с помощью тега CFQUERYPARAM.

Например:

<cfquery name="q">
    SELECT property1, property2, property3 
    FROM yourTable 
    WHERE RowID = <cfqueryparam value="#NumericVariable#" cfsqltype="CF_SQL_INTEGER" />
</cfquery>

Вы можете надеяться повысить скорость работы вашей базы данных, указав параметр связывания и указав возвращаемые свойства. Это может улучшить кэширование запросов и повысить производительность в зависимости от используемого вами механизма базы данных.

Я бы добавил, что в целом использование CFQUERYPARAM более безопасно, чем оставление переменных неквалифицированными и потенциально открытыми для атак с использованием SQL-инъекций.

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

Как это работает, cfquery все еще пытается запросить все строки таблицы, которые соответствуют вашим условиям where, но возвращает только x результатов.

Так что не совсем подходит для производительности.

Другой альтернативой, по крайней мере в SQL Server, является команда SET ROWCOUNT #, которая фактически ограничивает количество возвращаемых записей. Однако это может повлиять на все запросы cfqueries, если у вас есть проверка персистентности в cfadmin.

Или в mysql есть команда limit.

Хотелось бы, чтобы было лучшее решение, но его нет.

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

Я бы проверил из:

Запустите приведенный выше код для 10 различных значений RowID и сравните его с выполнением кода с условием maxrows. Если вы видите, что время выполнения всегда лучше для последнего, у вас есть окончательный ответ!

...