Это обычно сталкивается с проблемой, если вы разрабатываете какое-либо программное решение для любого правительственного отдела. Поэтому рассмотрим этот вопрос как решающий вопрос.Оптимизированный запрос в T-SQL
Понимание сценария Каждое правительство в качестве отделов, отделов в разных городах и каждого из них несет ответственность за удовлетворение потребностей гражданских служб. Например, Industry Commiserate. Если вы хотите создать новую производственную единицу для некоторых продуктов, вы должны обратиться в правительственный департамент, должностные лица проводят проверку и другие необходимые процедуры проверки. В конце получите решение, имеете ли вы право на создание подразделения.
Требования к собранию Для удовлетворения вышеуказанных требований мы создали базу данных ... Я не буду включать все здесь, а только необходимые таблицы. 1. GovtOfficers: офицеры деталь Юридических условий, имеющие поля
DeptOfficers: содержит офицер отдела, Граждан: являются люди, как мы, файл приложения, Применения: являются приложением, представленным гражданином ApplicationAction: - действия, принимаемые в различных областях применения ...
Теперь наша цель состоит в том, чтобы найти последнее состояние и имя сотрудника, работающее на конкретном применении ...
Мы напишем это нравится,
Select *
from Applications A
inner join Citizens C on A.CitizenId=C.Id
left join ApplicationAction AC on A.Id=AC.ApplicationId
left join
(
Select max(Id)
from ApplicationAction
group by ApplicationId
) X on AC.Id=X.Id
Этого запрос выбирает требуемый результат и работает отлично. ... Но это не происходит, когда данные растут до 10-20 Lacks, он начинает принимать время и в конечном итоге может истечь.
Что может быть лучше подходит? OK. Основываясь на накопленном опыте, я могу добавить ActionId в таблицу приложений, в котором будут храниться последние действия, предпринятые в этой таблице .... и может решить мою проблему. Проблема в том, что я могу использовать вышеупомянутое решение для предстоящих проектов. Не проекты, которые я завершил, или у меня нет контракта.
Так что я не ищу изменения схемы в любом случае для оптимизации выше запроса.
функция окна 'row_number()' должны работать в вашем случае – cha
Вы можете увидеть план выполнения этого запроса с несколькими тысяч записей против 20 лакх записей? Возможно, анализатор запросов изменяет план запроса, и если это так, вы можете увидеть, какая ветка стоит больше всего. – zedfoxus
Действительно, этот запрос работает нормально? ApplicationId не является столбцом в приложении - и это неправильно на диаграмме. И я сомневаюсь, что CitizenID - один для многих. Ответ только имеет хороший вопрос. Опубликуйте рабочий запрос и план запроса. – Paparazzi