作为一般经验法则:不包含PartitionKey
or的查询RowKey
不会执行得很好。
我假设您的LastName
列既不是 Partition-也不是 RowKey。在这种情况下,您只有不好的选择。表存储的工作方式是将分区的实体存储在一起,因此最快的查询是那些包含您要查找的实体的分区键的查询。由于您不能在任何其他列上建立索引,所有不包括 RowKey 的查询都将是分区扫描,即根本不会执行良好,因为必须分析该分区的所有行。
在您的情况下,如果您正在查找所有包含重复值的列,那么最好的选择可能是查询所有内容并在本地查找重复项。
我认为您不能创建会返回结果的表存储查询。据我所知,没有这样的东西select … where count(select duplicates) > 1
——即使是这样,那个查询也会很慢。除非我们谈论的是海量数据,否则简单地查询所有内容并在本地进行过滤可能会表现得更好。
正如我所说,你只有糟糕的选择。那是因为表存储不是为这样的查询而设计的。与 SQL 表不同,表存储表在设计时应考虑到查询,即在设计表之前您应该知道如何查询表。
您的第二个选择是迁移到 Azure SQL,这样的查询根本没有问题。Azure SQL 与表存储有很大不同,因此它是否符合您的要求值得怀疑。
编辑:您可以优化查询一切解决方案的一种方法是只返回您的实体的姓氏(+ Partition/RowKey 或您需要的任何其他内容)。这样,发送的数据量可能会减少很多。这是一篇关于查询投影的文章,详细解释了这种技术。