Я не пытаюсь начать дискуссию о том, что лучше вообще, я задаю этот вопрос специально. :)
Мне нужно написать запрос, чтобы получить список идентификаторов пользователей (uid) из базы данных, содержащей более 500 тыс. Записей. Я возвращаю только одно поле, UID. Я могу запросить либо наш блок Oracle, либо наш блок MSSQL 2000. Запрос выглядит так (это не было упрощено)
select uid
from employeeRec
where uid = 'abc123'
Да, это действительно просто запрос. Там, где мне нужна помощь по настройке, это то, что uid проиндексирован, и некоторые uid могут быть (не многие, а некоторые) «ABC123» или «abc123». MSSQL не заботится о чувствительности к регистру, тогда как Oracle. Поэтому для Oracle мой запрос будет выглядеть так:
select uid
from employeeRec
where lower(uid) = 'abc123'
Я узнал, что если вы используете более низкое поле индекса в MSSQL, вы делаете индекс бесполезным (есть способы обойти это, но это выходит за рамки моего вопроса здесь - поскольку, если я выберу MSSQL, я не Т нужно использовать ниже вообще). Я хотел знать, если я выберу Oracle и использую функцию lower (), это также повлияет на производительность запроса?
Я повторяю этот запрос около 200 раз в дополнение к некоторым другим запросам, которые выполняются, и на обработку всего цикла уходит 1 секунда на каждую итерацию, и я сузил медленность этого конкретного запроса. Для веб-страницы 200 секунд кажутся вечностью. Для читателей CF значение тайм-аута было увеличено, поэтому страница не содержит ошибок и нет ошибок, я просто пытаюсь ускорить этот запрос.
Еще один момент, на который следует обратить внимание: эта база данных находится в другом городе, чем другие выполняемые запросы, поэтому я ожидаю некоторого времени задержки там.