我有以下代码需要很长时间才能执行。我需要做的是选择行号等于1的列,然后将其划分为三列(col_1,col_2,col_3)(这也是关键列),并按如下所述对某些列进行排序。该表中的记录数约为9000万。我是遵循最佳方法还是有其他更好的方法?
with cte as (SELECT
b.*
,ROW_NUMBER() OVER ( PARTITION BY col_1,col_2,col_3
ORDER BY new_col DESC, new_col_2 DESC, new_col_3 DESC ) AS ROW_NUMBER
FROM (
SELECT
*
,CASE
WHEN update_col = ' ' THEN new_update_col
ELSE update_col
END AS new_col_1
FROM schema_name.table_name
) b
)
select top 10 * from cte WHERE ROW_NUMBER=1
答案 0 :(得分:0)
当前,您正在对不同的列应用CASE,这会影响数据库表中的所有行。 CASE(字符串比较)是一种昂贵的方法。
最后,您仅保留ROW NUMBER = 1的记录。如果我猜想此过滤器保留所有记录的一半,那么如果您进行过滤(生成ROW NUMBER First和RN ROW Rows),这将增加查询执行时间。 = 1)首先在列上应用CASE方法。