Я оцениваю проблемы с производительностью в приложении для ввода данных, используя c# (VS 2005), framework 2.0 с ORACLE 11. Приложение используют более 120 человек в сети. В основном, задача проста, только проверить данные о зарплате в документах, а затем записать их в базу данных. Для достоверности данных пользователь чаще всего проверяет идентификационный номер сотрудника или его имя или фамилию в большой базе данных (5 миллионов). Иногда во время выполнения задачи приложение на мгновение блокируется (от нескольких секунд до нескольких минут), что делает невозможным продолжение работы. Эта проблема не обеспечивает продуктивности и приводит к значительным задержкам при планировании работы.
Приложение (3 уровня: внешний интерфейс, средний уровень и серверная часть) использует основные таблицы для проверки данных и просмотра сетки для добавления, изменения или удаления данных. На данный момент обновление ИТ невозможно.
Первый вопрос: Мне интересно, является ли хорошей практикой использование представлений вместо основных таблиц для сокращения накладных расходов и блоков приложений?
Запросы для поиска данных:
Для поиска по EmployeeID:
SELECT name FROM employees WHERE id = EmployeeID OR af = EmployeeID;
(только поле идентификатора - PK, поле af соответствует другому идентификационному номеру, но не у всех есть it)
Для поиска по имени:
SELECT id, DECODE(complete_name, null, name_null) name, first_name, last_name, sex FROM employees WHERE name_null LIKE CONVERT(REPLACE'" + first_name.ToUpper() + "%" + last_name.ToUpper() + "%" + "','Ñ','N'),'US7ASCII')" OR name_null LIKE CONVERT(REPLACE'" + last_name.ToUpper() + "%" + first_name.ToUpper() + "%" + "','Ñ','N'),'US7ASCII')";
Эти два запроса создаются в функциях, поэтому данные возвращаются по запросу. Затем данные отображаются в DataGrids для пользователя.
Второй вопрос: Если есть другие способы оптимизации запросов, учитывая представленные факты?
Спасибо за любой совет.