Чтобы помочь объяснить мой вопрос, я объясню немного проблемы.У нас есть база данных клиентов, включая историю их адресов (т. Е. Каждое обновление адреса вставляет новую строку в таблицу адресов, и у нас есть представления, которые извлекают самую последнюю информацию для создания отчетов на экране и в печатных отчетах).
Требование пользователя для нового поиска заключается в том, что мы показываем его текущий адрес (если он у нас есть в файле) в результатах поиска, чтобы определить, что он действительно находит правильного клиента.
Мы достигли снижения производительности, запустивоставьте соединение для просмотра в наших возвращенных результатах поиска, поэтому здесь возникает вопрос.
Нашей первой мыслью было сохранить копию последнего адреса для целей отображения только в нашей таблице клиентов, но мы былиобеспокоен тем, как сохранить эти данные обновленными.Мы задавались вопросом, может ли вычисляемый столбец быть построен на скалярной функции для запроса нашего представления и сохранится ли он, или триггеры были нашей единственной возможностью.
Я полностью лаю неправильное дерево, рассматривая способы полученияПринимая во внимание эту медлительность, стоит ли мне заняться каким-либо образом настройкой базы данных, чтобы оптимизировать поиск?
Заранее спасибо, Уэсли
edit: запрос выглядит так:
Select
Clients.ClientID,
Clients.LastName,
Clients.FirstName,
Clients.PreferredName,
PrimaryDeliveryCity as City,
PrimaryDeliveryPostalCode as PostalCode,
DateOfBirth,
ClientNumber
FROM
Clients LEFT JOIN v_LatestClientAddressHistoryRecord
ON Clients.ClientID = v_LatestClientAddressHistoryRecord.ClientID
WHERE
ClientNumber like @ClientNumber + '%'
Действительно, в запросе есть%, но не в объединенной таблице.
Клиенты имеют 50 000 записей, представление имеет аналогичные, но немного меньшие значения, таблица базовых адресов имеет 200 000
Правка # 2:
SELECT ClientAddressHistoryRecords.*
FROM
dbo.ClientAddressHistoryRecords INNER JOIN dbo.v_LatestClientAddressHistoryRecordID
ON dbo.ClientAddressHistoryRecords.ClientID = dbo.v_LatestClientAddressHistoryRecordID.ClientID
AND
dbo.ClientAddressHistoryRecords.ClientAddressHistoryRecordID = dbo.v_LatestClientAddressHistoryRecordID.MaxClientAddressHistoryRecordID
и представление v_LatestClientAddressHistoryRecordID
SELECT MAX(ClientConsentHistoryRecordID) AS MaxClientConsentHistoryRecordID, ClientID
FROM dbo.ClientConsentHistoryRecords
GROUP BY ClientID