一列一列排序的有效方式



我在设计一种通过排序另一个表来对一个表进行排序的有效方法时遇到了一个问题。

我得到了一个Customer,它有LicenceIdCountryLicence表有列Name。我想显示按许可证名称排序的前1000名客户,其中Country = "DK"

licences的客户数量超过1万,客户数量超过100万。

我最初的想法是对Licenses进行排序,并将它们存储在Dictionary<string, int>中,其中key是Name,value是有序元素的索引。然后创建一个容量为1000的Min Heap,并使用这些排序的索引将客户添加到堆中。这将导致O(nlog(n)) + O(mlog(1000)(n-#许可证,m-#客户(。

但是,当谈到在SQL中实现它时,我面临着将客户数据加载到内存(约100MB(的一些问题,这会减慢处理速度,并且在SQL中对整个客户表进行排序也没有那么快。有没有更快的解决方案?

您可以从编写SQL查询开始:

select c.*, l.licensename
from customers c join
licenses l
on c.licenseid = l.licenseid
where c.country = 'DK'
order by l.licensename
fetch first 1000 rows only;

然后让优化器来完成这项工作。在这种情况下,您可能需要customers(country, licenseid)licenses(licenseid, licensename)上的索引——尽管如果licenseid被声明为主键,则第二个索引可能存在。

不要担心微观优化。这就是SQL优化器的工作。

最新更新