【发布时间】:2019-04-05 21:07:16
【问题描述】:
FK GeoNameId 表 GeoNames(未显示)和 GeoNameAlternateNames(如下所示)之间存在一对多关系。鉴于以下结构,我想获取 IsPreferredName = 1 的替代名称值,如果未找到,则使用下一列 IsShortName,如果未找到该记录,则使用下一列,依此类推。在这种情况下,我希望返回顶行。请记住,我将从 GeoNames 表加入此表。
GeoNames 中有超过 1100 万条记录,GeoNamesAlternateNames 中有超过 1700 万条记录,因此像尼安德特人一样处理它是不可接受的解决方案。
在这方面表现最好的策略是什么?我已经尝试过分组,在每列上加入并合并,在子表中排名,我正要拔出我的头发。提前致谢。
【问题讨论】:
-
您使用的是哪个 DBMS?
-
您可以更改表,即添加要索引的计算列吗?所有
is...列的值是1还是NULL(或者可能是0)?我假设from和to不是检查的一部分,对吗? -
我们使用的是 sql server 2016。我想保持原始数据源不变,尽可能不转换数据。感谢您的帮助。
标签: sql sql-server performance sql-server-2016