Итак, у меня есть следующая схема:
![enter image description here](https://i.stack.imgur.com/TMiri.png)
И я пытаюсь получить данные в следующем формате:
________________________________________
| Id | Property1 | Property2 | Property3 |
_________________________________________
| 123| Value1 | Value2 | Value3 |
________________________________________
Итак, способ составления SQL-запроса выглядит следующим образом:
SELECT
Id
,(SELECT pv.Value FROM CampaignProperty AS cp LEFT JOIN PropertyValue AS pv ON cp.Id = pv.CampaignPropertyId WHERE cp.Name = "Property1" AND pv.ContactId = c.Id AND cp.CampaignId = c.ActiveCampaignId) AS "Property1"
,(SELECT pv.Value FROM CampaignProperty AS cp LEFT JOIN PropertyValue AS pv ON cp.Id = pv.CampaignPropertyId WHERE cp.Name = "Property2" AND pv.ContactId = c.Id AND cp.CampaignId = c.ActiveCampaignId) AS "Property2"
,(SELECT pv.Value FROM CampaignProperty AS cp LEFT JOIN PropertyValue AS pv ON cp.Id = pv.CampaignPropertyId WHERE cp.Name = "Property3" AND pv.ContactId = c.Id AND cp.CampaignId = c.ActiveCampaignId) AS "Property3"
FROM Contact c
У меня проблема в том, что я сделал для более чем 10 свойств, у меня есть пара LEFT JOIN инесколько фильтров, которые делают мой запрос невероятно неэффективным.Проанализировав это в студии SQL Management, я понял, что узким местом являются те SELECT, которые я показал выше.
Как я могу получить тот же результат, но с лучшей производительностью?Есть ли другой способ выполнить запрос?
Важно также отметить, что таблица PropertyValue
не имеет индексов на данный момент ...