【发布时间】:2017-02-07 09:23:56
【问题描述】:
我有一个查询,它正在从表中搜索结果,如果一行与特定对象匹配,它将提供结果。
所以,它是一个 12 个字母的数字。
所以功能是如果用户提供一个数字为 414。它会像“%414%”一样搜索。
如果数字的长度超过 6 位,它将搜索“4146144%”
因此查询变得越来越慢,因为我们有 2000 万条记录。
能否请您提供任何替代方法来解决该问题。
公司不允许使用任何 API 或其他任何东西。
SELECT distinct TOP (15) bt_id AS [Key]
, UPPER(rtrim(ltrim(bt_id)))+' - '+UPPER(rtrim(ltrim(bt_desc))) AS [Description]
FROM fcbillto
WHERE bt_id like '%' + @SearchTerm + '%'
OR bt_desc like '%' + @SearchTerm + '%'
如果全文扫描是解决方案,那么我可以为单个表创建两个不同的目录,因为上面是我需要搜索的列之一,而在其他情况下,我正在搜索同一个表的其他列。所以,我需要创建两个存储库。
【问题讨论】:
-
是 bt_desc ntext 吗?您真的需要搜索描述中的数字,还是仅在 bt_id 中搜索就足够准确?
-
两者都是数据类型 char,Bt_id char(12) 和 bt_desc 是 char(40)。由于数据库设计较早,所以我无法更新设计部分
-
@dlatikay: 再多的索引都无法通过
LIKE '%414%'搜索(带有前导%通配符)加快查询速度——这些总是全表扫描,因此速度很慢...... ...
标签: sql-server sql-server-2008 tsql