Поэтому у меня есть эти таблицы:SQL альтернативный стержень сервера запросов или оптимизации
-- tbl_obs
id lat lon created
-------------------------
1 1.2 -2.1 2002-08-03
2 1.9 -5.5 2002-08-03
3 1.5 -4.1 2002-08-03
-- tbl_obsdata
id name value obs_id
---------------------------------
1 gender Male 1
2 type Type I 1
3 description Some desc 1
4 gender Female 2
5 type Type II 2
6 description Some desc 2
7 gender Female 3
8 type Type II 3
9 description Some desc 3
хочу запрос, который будет сочетать в себе данные как таблицы, как это:
lat lon created gender type description
------------------------------------------------
1.2 -2.1 2002-08-03 Male Type I Some desc
1.9 -5.5 2002-08-03 Female Type I Some desc
1.5 -4.1 2002-08-03 Male Type II Some desc
Я знаю, что я могу это сделать с шарниром, как:
with cte as (
select obsdata.name, obsdata.value, obs.lat, obs.lon, obs.created
from obsdata
left join obs on obs.id = obsdata.obs_id
)
select lat, lon, created, gender, type, description
from cte
pivot(
max(value)
for [name] in (gender, type, description)
) as pvt
до сих пор это возвращает результат (я думаю), но у меня есть около миллиона строк, и это работает очень медленно. Любой альтернативный способ достичь этого будет намного быстрее? Я использую SQL Server 2012.
Он смотрит хорошело. Рассматривая вопрос, я думаю, что CTE может быть причиной медленности. Вы предпочитаете временную таблицу (с индексом) вместо CTE? – BhatiaAshish
@BhatiaAshish. , , Я предпочитаю один запрос во временные таблицы, если последние не являются абсолютно необходимыми. –
У Pivots есть проблемы с производительностью и, как правило, будет медленнее, чем такие решения, как, например, Джон Каппалетти. Unpivots прекрасны, но поскольку я работаю в среде с большими объемами больших объемов данных, я никогда не использую опорные точки. – btberry