#sql
Вопрос:
У меня слишком медленный SQL-запрос, потому что «пользовательский столбец». как я могу сделать это лучше?
вот код:
select VBI.ID_acesso, VBI.data_hora AS Data_Hora_Entrada, VBI.data AS Data_Entrada, VBI.Sentido AS Sentido, VBI.Unidade AS Unidade, replace(replace(VBI.Documento,'.',''),'-', '') AS Documento, VBI.Tipo_Documento, VBI.Nome, VBI.Tipo_Usuario AS Tipo_Usuario, VBI.Categoria AS Tipo_Pessoa, VBI.Empresa_Usuario, VBI.Visitado, VBI.Tipo_Documento_Visitado, ( SELECT MIN(VBI2.DATA_HORA) FROM Ses.dbo.VIEW_Mand_Dashboard_BI VBI2 WHERE VBI2.documento = VBI.documento AND VBI2.ID_acesso gt; VBI.ID_acesso AND VBI2.Tipo_Documento = VBI.Tipo_Documento AND VBI2.Sentido = 'Saída' AND VBI2.data_hora gt;= VBI.data_hora ) as Data_hora_Saida FROM Ses.dbo.VIEW_Man_Dashboard_BI VBI WHERE VBI.[data] gt;= CONVERT(DATE,'2021-10-01') and VBI.Sentido = 'Entrada' and VBI.Empresa_Usuario NOT IN ('CAMPSEG') order by VBI.Unidade, VBI.data_hora;
Часть, которая замедляет мой запрос, — это столбец: Data_hora_Saida
Комментарии:
1.
MIN(VBI2.DATA_HORA)
вероятно, в этом и заключается проблема. Сколько строк у вас в этой таблице?2. Помечайте только ту базу данных, которую вы используете.
3. около 4-5 миллионов рядов
Ответ №1:
Может быть, попробуем
(SELECT TOP 1 * FROM Ses.dbo.VIEW_Mand_Dashboard_BI VBI2 WHERE VBI2.documento = VBI.documento AND VBI2.ID_acesso gt; VBI.ID_acesso AND VBI2.Tipo_Documento = VBI.Tipo_Documento AND VBI2.Sentido = 'Saída' AND VBI2.data_hora gt;= VBI.data_hora ORDER BY VBI2.DATA_HORA ) as Data_hora_Saida
Комментарии:
1. DATA_HORA = ДАТА И ВРЕМЯ
2. Вы пробовали, и это не сработало?
TOP
должен работатьdatetime
.3. Попробуйте только это
SELECT
утверждение проверить, дает ли оно вам правильные результаты, затем добавьте его в полное утверждение и посмотрите, что оно вам даст.4. спасибо за подсказку.. что ТОП-1 снизил хорошую производительность во время
Ответ №2:
Можете ли вы попробовать использовать подзапрос, столбец Data_hora_Saida вместо добавления в раздел «ВЫБОР»
Комментарии:
1. извини, я новенькая. как я могу это сделать?