Запрос на точную настройку MS SQL Coldfusion - PullRequest
0 голосов
/ 05 апреля 2011

Мы с коллегой пытаемся настроить очень простой запрос. Он сказал, что где-то читал, что использование более низких значений по сравнению с lcase может повлиять на производительность сервера, и что один метод более эффективен, чем другой, но мы не можем найти статью, и я подумал, что я хотел бы спросить вас здесь о том, что вы думаете. Должны ли мы тратить время на поиски других возможностей, чтобы настроить производительность?

Coldfusion 8 Enterprise MS SQL Server 2000 Набор записей: 500 000+ записей

Оригинальный запрос:

select last_name lname
from phone
where uid = <cfqueryparam value="#attributes.email#" cfsqltype="cf_sql_varchar" maxlength="50">

Вариант A

select last_name lname
from phone
where lower(uid) = <cfqueryparam value="#attributes.email#" cfsqltype="cf_sql_varchar" maxlength="50">

Вариант B

select last_name lname
from phone
where uid = <cfqueryparam value="#lcase(attributes.email)#" cfsqltype="cf_sql_varchar" maxlength="50">

Вариант C

select last_name lname
from phone
where uid = lower(<cfqueryparam value="#attributes.email#" cfsqltype="cf_sql_varchar" maxlength="50">)

База данных проиндексирована и содержит около 500 000 записей. Даже если это простой запрос, мы повторяем это примерно 150 раз, поэтому все, что мы можем сделать, чтобы сбрить секунду или две, поможет.

Ответы [ 3 ]

1 голос
/ 05 апреля 2011

Использование lower в индексированном столбце приведет к тому, что MS SQL не будет использовать ваш индекс. Это может привести к значительному снижению производительности в таблице вашего размера. Вы должны убедиться, что UID всегда в нижнем регистре, когда вы вставляете его, или можете попробовать это: нижняя функция в индексированном столбце

0 голосов
/ 05 апреля 2011

Может быть бессмысленно выполнять все эти LCase / LOWER, как:

Соответствие текста в SQL Server не учитывает регистр

Как выполнить регистрпоиск в SQL Server? :

При установке SQL Server по умолчанию регистр не учитывается, что означает, что SQL Server не будет различать прописные и строчные символы / буквы.

0 голосов
/ 05 апреля 2011

В вашем случае вы ищете по полю электронной почты, которое в большинстве случаев заполнено строчными буквами, чем заглавными.Таким образом, преобразование в нижний регистр может (тесты подскажут вам) ускорить процесс.

Что касается применения этого к вашему запросу, вы должны преобразовать в нижний регистр и поле, и переменную электронной почты (чтобы они были сопоставимы):

select last_name lname
from phone
where lower(uid) = <cfqueryparam value="#lcase(attributes.email)#" 
                                 cfsqltype="cf_sql_varchar"
                                 maxlength="50">

(преобразование #attributes.email# внутри тега cfqueryparam лучше, потому что это будет сделано только один раз перед отправкой запроса на sql-сервер)

больше информации в этой статье: Совет по производительности: верхний регистр и нижний регистр

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...