遇到一个问题,关于view的效率,请求大家帮忙分析
第一段,
SELECT a.id ,
a.change ,
a.last_quote
FROM ( SELECT * ,
DATEADD(hh,
( SELECT CASE WHEN time_zone IS NULL THEN -5
ELSE time_zone
END AS time_zone
FROM users
WHERE id = 15
) + 5, b.time) AS time1 ,
DATEADD(hh,
( SELECT CASE WHEN time_zone IS NULL THEN -5
ELSE time_zone
END AS time_zone
FROM users
WHERE id = 15
) + 5, b.delayed_time) AS delayed_time1 ,
( SELECT TOP 1
order_index
FROM USER_SECTION_SETTINGS
WHERE user_id = b.user_id
AND theme_id = b.theme_id
AND symbol_id = b.id
AND order_index IS NOT NULL
) AS order_index
FROM V2_SECTION_231 b
WHERE id IN ( SELECT symbol_id
FROM USER_SECTION_SETTINGS
WHERE user_id = 15
AND theme_id = '19' )
AND theme_id = '19'
AND b.user_id = 15
AND b.theme_id = '19'
) a
LEFT JOIN symbols ON a.id = symbols.id
WHERE is_rt = 1
如果换成 select * 如下显示,速度会快很多,为什么啊 ?
SELECT *
FROM ( SELECT * ,
DATEADD(hh,
( SELECT CASE WHEN time_zone IS NULL THEN -5
ELSE time_zone
END AS time_zone
FROM users
WHERE id = 15
) + 5, b.time) AS time1 ,
DATEADD(hh,
( SELECT CASE WHEN time_zone IS NULL THEN -5
ELSE time_zone
END AS time_zone
FROM users
WHERE id = 15
) + 5, b.delayed_time) AS delayed_time1 ,
( SELECT TOP 1
order_index
FROM USER_SECTION_SETTINGS
WHERE user_id = b.user_id
AND theme_id = b.theme_id
AND symbol_id = b.id
AND order_index IS NOT NULL
) AS order_index
FROM V2_SECTION_231 b
WHERE id IN ( SELECT symbol_id
FROM USER_SECTION_SETTINGS
WHERE user_id = 15
AND theme_id = '19' )
AND theme_id = '19'
AND b.user_id = 15
AND b.theme_id = '19'
) a
LEFT JOIN symbols ON a.id = symbols.id
WHERE is_rt = 1如果换成 select * 如下显示,速度会快很多,为什么啊 ?
第一段,
SELECT a.id ,
a.change ,
a.last_quote
FROM ( SELECT * ,
DATEADD(hh,
( SELECT CASE WHEN time_zone IS NULL THEN -5
ELSE time_zone
END AS time_zone
FROM users
WHERE id = 15
) + 5, b.time) AS time1 ,
DATEADD(hh,
( SELECT CASE WHEN time_zone IS NULL THEN -5
ELSE time_zone
END AS time_zone
FROM users
WHERE id = 15
) + 5, b.delayed_time) AS delayed_time1 ,
( SELECT TOP 1
order_index
FROM USER_SECTION_SETTINGS
WHERE user_id = b.user_id
AND theme_id = b.theme_id
AND symbol_id = b.id
AND order_index IS NOT NULL
) AS order_index
FROM V2_SECTION_231 b
WHERE id IN ( SELECT symbol_id
FROM USER_SECTION_SETTINGS
WHERE user_id = 15
AND theme_id = '19' )
AND theme_id = '19'
AND b.user_id = 15
AND b.theme_id = '19'
) a
LEFT JOIN symbols ON a.id = symbols.id
WHERE is_rt = 1
如果换成 select * 如下显示,速度会快很多,为什么啊 ?
SELECT *
FROM ( SELECT * ,
DATEADD(hh,
( SELECT CASE WHEN time_zone IS NULL THEN -5
ELSE time_zone
END AS time_zone
FROM users
WHERE id = 15
) + 5, b.time) AS time1 ,
DATEADD(hh,
( SELECT CASE WHEN time_zone IS NULL THEN -5
ELSE time_zone
END AS time_zone
FROM users
WHERE id = 15
) + 5, b.delayed_time) AS delayed_time1 ,
( SELECT TOP 1
order_index
FROM USER_SECTION_SETTINGS
WHERE user_id = b.user_id
AND theme_id = b.theme_id
AND symbol_id = b.id
AND order_index IS NOT NULL
) AS order_index
FROM V2_SECTION_231 b
WHERE id IN ( SELECT symbol_id
FROM USER_SECTION_SETTINGS
WHERE user_id = 15
AND theme_id = '19' )
AND theme_id = '19'
AND b.user_id = 15
AND b.theme_id = '19'
) a
LEFT JOIN symbols ON a.id = symbols.id
WHERE is_rt = 1如果换成 select * 如下显示,速度会快很多,为什么啊 ?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货