Я создаю веб-сайт, который извлекает данные из таблицы и отображает их для пользователя. Для этого я создал представление в моей базе данных, которое объединяет основную таблицу «История» с другими таблицами по идентификатору, чтобы получить имена некоторых столбцов вместо идентификатора. Однако, когда я делаю «SELECT * FROM VIEW», запрос никогда не заряжается. Я попытался запустить его в базе данных, и для получения примерно 4 миллионов строк требуется 16 минут.
Как вы можете заметить, я не специалист по SQL. Я попытался создать некластеризованные индексы в столбцах, которые я использую для объединений, а также я создал один индекс для всех столбцов одновременно, но, похоже, ничего из этого не работает. (Созданные мной индексы находятся в исходной таблице, а не в представлении)
Вот как я создаю вид. Я выбираю столбцы, которые хочу показать, а затем выполняю внешние левые соединения, чтобы получить имена столбцов по идентификатору.
DROP VIEW BIHistoricoEventos
GO
CREATE VIEW BIHistoricoEventos AS
SELECT BI.HISTORICO_EVENTOS_CERRADOS.COD_EVE,
BI.HISTORICO_EVENTOS_CERRADOS.FEC_NOT,
BI.HISTORICO_EVENTOS_CERRADOS.SEMANA,
BI.HISTORICO_EVENTOS_CERRADOS.ANO,
BI.HISTORICO_EVENTOS_CERRADOS.COD_PRE,
BI.HISTORICO_EVENTOS_CERRADOS.COD_SUB,
BI.HISTORICO_EVENTOS_CERRADOS.COD_DPTO_O,
BI.HISTORICO_EVENTOS_CERRADOS.COD_MUN_O,
BI.HISTORICO_EVENTOS_CERRADOS.COD_ASE,
BI.HISTORICO_EVENTOS_CERRADOS.AJUSTE,
TipoEvento.nom_eve AS 'Nombre evento', Departamentos.Nom_dpto
AS 'Departamento',
Municipios.Nom_mun AS 'Municipio',
Ajustes.nombre AS 'Nombre Ajuste', Aseguradoras.Raz_soc AS
'Razon social aseguradora'
FROM BI.HISTORICO_EVENTOS_CERRADOS LEFT OUTER JOIN
Departamentos ON BI.HISTORICO_EVENTOS_CERRADOS.COD_DPTO_O =
Departamentos.Cod_dpto LEFT OUTER JOIN
Municipios ON CONCAT(BI.HISTORICO_EVENTOS_CERRADOS.COD_DPTO_O,
BI.HISTORICO_EVENTOS_CERRADOS.COD_MUN_O) =
Municipios.Cod_mun LEFT OUTER JOIN
Aseguradoras ON BI.HISTORICO_EVENTOS_CERRADOS.COD_ASE =
Aseguradoras.Cod_ase LEFT OUTER JOIN
TipoEvento ON BI.HISTORICO_EVENTOS_CERRADOS.COD_EVE =
TipoEvento.cod_eve LEFT OUTER JOIN
Ajustes ON BI.HISTORICO_EVENTOS_CERRADOS.AJUSTE =
SUBSTRING(Ajustes.nombre, 1, 1)
GO
Я сделал индексы для каждого столбца, присутствующего в объединениях, но это все еще занимает много времени.
Я также точно не знаю, должны ли индексы быть в исходной таблице или в представлении.
Я хотел бы сократить время, затрачиваемое на запрос, с нетерпением жду ваших ответов. Спасибо.
РЕДАКТИРОВАТЬ: Вот план выполнения .. Но в настоящее время я не знаю, как это оптимизировать.
Вот ссылка на изображение https://i.ibb.co/NysYKVQ/execution-plan.png