我多次连接一张表格,每次都会基于其中一列的 SUBSTRING(它是一个字符串,但左边用零填充,且我不关心最后四位数字)的结果进行连接(或过滤)。尽管该列已被索引,我的查询也会使用索引,但由于 SUBSTRING 本身并没有被索引,因此 SQL Server 必须在连接之前为每一行计算它而进行表扫描。
我正在寻找任何加速这个过程的想法。目前,该表上有一个视图(它是 "SELECT * FROM",只是为了给表起个友好的名字),我正在考虑添加一个计算列到视图中,然后对其进行索引。不过,我也乐意听取其他建议 - 有什么想法吗?
更多细节: 我应该一开始就分享这个内容。该表从我们的计费系统接收复制,因此编辑底层表以添加计算列不是一个选项。任何计算列都必须添加到表的视图中。此外,前导零并不总是前导零 - 它们有时是我不感兴趣的其他数据。我想真正的问题是 "如何连接 VARCHAR 列中间的数据并同时利用索引?全文搜索?"
澄清我的例子 我在简化,但本质上,假设我正在尝试查找具有以下值的列中的值:
00000012345MoreStuff
00000012345Whatever
19834212345
Houses12345837443GGD
00000023456MoreStuff
我对SUBSTRING(7,5)="12345"的行感兴趣,因此我想要第1-4行,但不想要第5行。我的想法是在我的“SELECT *”视图中添加一个包含此子字符串的列,然后基于该列进行索引。这样做更有意义吗?
JOIN
,您应该转换列,使其以您要搜索的条件开头。目前,您的算法过于模糊。 "不总是前导零的前导零" 很难向 SQL Server 解释。FULLTEXT
索引可用于搜索单词中的前缀(而不是整个列),但仍应将数据拆分为单词。您能否更清楚地定义您的搜索算法? - Quassnoi