SQL Server选择请求调整

时间:2019-03-21 16:55:43

标签: sql-server azure nosql sql-tuning

我们有一个包含约6000万条记录的SQL Server数据库表。这些是特定实体的名称和地址的记录。该表包含以下列:

[Name] [nvarchar](425) NOT NULL,
[Street] [nvarchar](900) NULL,
[City] [nvarchar](900) NULL,
[State] [nvarchar](900) NULL,
[PostalCode] [nvarchar](100) NULL

我们必须实现的是能够在1秒内执行特定的select语句。

我们应该能够基于“ [名称]”是否包含一个或几个输入的单词(不是“完全匹配”,也不是“开头为”)选择记录,然后应用下一个优先级排序逻辑:

  1. 在位于给定[州]和[城市]的顶部记录上显示
  2. 显示位于给定[州]但另一个城市的项目
  3. 显示位于其他状态的项目

这是我们尝试过的:

  1. 我们尝试以多种方式重建表,在不同的表中提取不同的列,在不同的索引集中提取每个词作为令牌在单独的文件夹中
  2. SQL Server全文搜索。 (以匹配具有“包含”功能的记录)
  3. Azure Cosmos DB。我们在那里迁移了数据,以评估我们是否可以执行足够有效的选择

问题始终是根据状态+城市优先记录

问题是在这种情况下,我们如何使用SQL Server或任何其他数据源(最好在Azure上可用)实现在1秒内执行选择的功能

1 个答案:

答案 0 :(得分:1)

除了规范化if(doesSmoke){ yearsTotal = yearsTotal - 7.5 } if hoursSleepAvg < 7 { yearsTotal = yearsTotal - yearsTotal / 100.0 } if hoursSleepAvg > 8 { yearsTotal = yearsTotal - yearsTotal / 100.0 CityState并适当调整这些字段的大小之外,我唯一想到的就是建立一个单词列表:

Zip

具有一个例程(也许是一项夜间工作),该例程通过解析Create Table tbl_Entity ( [ID] [Int] Identity Not Null, [Name] [nvarchar](425) NOT NULL, [Street] [nvarchar](900) NULL, [City] [nvarchar](900) NULL, [State] [nvarchar](900) NULL, [PostalCode] [nvarchar](100) NULL ) Create Table tbl_Entity_Name_Elements ( [ID] [Int] Identity Not Null, [Entity_ID] [Int] Not Null, -- foreign key to tbl_Entity [Name_Element] [nvarchar](100) Null ) 中的行来填充bl_Entity_Name_Elements。在tbl_Entity上索引tbl_Entity_Name_Elements,您应该能够相当快地获得包含所有给定单词列表的Name_Element值,并且应该可以SARG。这样就为您提供了所需的Entity_ID个项目。这有道理吗?