如何以更好的方式在表值函数的多列中搜索字符串



UDF:

ALTER FUNCTION [dbo].[udf_GetActivity] 
(@XWILDCARDSEARCH NVARCHAR(100))
RETURNS 
@TABLE TABLE (SRCCODE NVARCHAR(10), 
DESCRPTN NVARCHAR(100), 
PARENTTRANID NVARCHAR(10), 
INVOICE NVARCHAR(50), 
PERIOD NVARCHAR(7), 
REF NVARCHAR(20), 
CURRCODE NVARCHAR(10), 
DEPARTMENT NVARCHAR(10), 
INVCDATE DATETIME, 
RECPTTYPEID NVARCHAR(20), 
RECPTNO NVARCHAR(20), 
ADDLDESC NVARCHAR(1000)
)
AS
BEGIN
INSERT INTO @TABLE
SELECT 
A.SOURCECODE, A.DESCRIPTION, 
B.PARENTTRANSID, B.INVOICE, 
A.PERIOD, A.REF, B.CURRENCYCODE, ... 
A.ADDITIONALDESCRIPTION
FROM 
TABLEA A
JOIN 
TABLEB B ON A.SOURCECODE = B.SOURCECODE
RETURN
END

@XWILDCARDSEARCH的参数可以是任何字符串('09', 'rent', 'invc93', '2')。

使用以下列按参数筛选表结果。正在寻找类似的东西

WHERE A.DESCRIPTION LIKE '%' + @XWILDCARDSEARCH+ '%'
OR A.REF LIKE '%' + @XWILDCARDSEARCH+ '%'
OR B.INVOICE LIKE '%' + @XWILDCARDSEARCH+ '%'
  1. 描述
  2. 发票
  3. 参考

这很好,但速度很慢,所以想知道有没有其他方法可以以最好的方式完成这项工作?

不幸的是,如果搜索到的字符串以通配符开头(这就是您的情况),则无法使用索引来加快查询速度。

您可以使用全文搜索(最好是在数据库副本上),这种方法需要创建全文索引,如果您需要在多列上搜索,这是一种非常适合的解决方案

A LIKE query against millions of rows of text data can take minutes to return; whereas a full-text query can take only seconds or less against the same data, depending on the number of rows that are returned.

https://learn.microsoft.com/en-us/sql/relational-databases/search/full-text-search?view=sql-服务器-ver15

或者,您可以使用其他技术,如ElasticSearch
https://www.elastic.co/

相关内容

  • 没有找到相关文章

最新更新