我有一张电话号码表,将电话号码存储为varchar(20)。我有一个要求既要搜索两个整数,又要搜索数字的最后一部分,因此典型的查询将是:

SELECT * FROM PhoneNumbers WHERE Number LIKE '%1234'


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

SELECT * FROM PhoneNumbers WHERE ReverseNumber LIKE '4321%'


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

还有其他建议吗?

最佳答案

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%'

关于sql-server - 字符串结尾的通配符匹配索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2810109/

10-09 20:06