字符串末尾通配符匹配的索引

And*_*bel 4 sql-server indexing

我有一个电话号码表,将电话号码存储为 varchar(20)。我需要实现对整个数字的搜索,但也只对数字的最后一部分进行搜索,因此典型的查询将是:

SELECT * FROM PhoneNumbers WHERE Number LIKE '%1234'
Run Code Online (Sandbox Code Playgroud)

如何在Number列上放置索引以使这些搜索高效?有没有办法创建一个索引来对反转字符串上的记录进行排序?另一种选择可能是在存储数字之前反转数字,这将给出如下查询:

SELECT * FROM PhoneNumbers WHERE ReverseNumber LIKE '4321%'
Run Code Online (Sandbox Code Playgroud)

但是,这将要求数据库的所有用户始终反转字符串。可以通过存储正常数字和反转数字并通过插入/更新时的触发器更新反转数字来解决此问题。但这种解决方案并不是很优雅。

还有其他建议吗?

Qua*_*noi 5

ALTER TABLE phonenumbers ADD reverse_number AS REVERSE(number) PERSISTED

CREATE INDEX ix_phonenumbers_reversenumber ON phonenumbers (reverse_number)

SELECT  *
FROM    phonenumbers
WHERE   reverse_number LIKE '4321%'
Run Code Online (Sandbox Code Playgroud)