Angenommen, Sie haben Ihre Felder in diesem Format:
00Data0007
000000Data0011
0000Data0015
, können Sie Folgendes tun:
-
Erstellen Sie eine berechnete Spalte:
ndata AS RIGHT(REVERSE(data), LEN(data) - 4)
Dadurch werden Ihre Spalten wie folgt umgewandelt:
ataD00 ataD000000 ataD0000
-
Erstellen Sie einen Index für diese Spalte
-
Setzen Sie diese Abfrage ab, um nach der Zeichenfolge
Data
zu suchen :SELECT * FROM mytable WHERE ndata LIKE N'ataD%' AND SUBSTRING(ndata, LEN(N'ataD') + 1, LEN(ndata)) = REPLICATE('0', LEN(ndata) - LEN('ataD'))
Die erste Bedingung verwendet einen Index zur groben Filterung.
Die zweite stellt sicher, dass alle führenden Zeichen (die in der berechneten Spalte zu den nachgestellten Zeichen wurden) nichts als Nullen sind.
Siehe diesen Eintrag in meinem Blog für Leistungsdetails:
Aktualisieren
Wenn Sie nur einen Index für SUBSTRING
wollen ohne Ihr Schema zu ändern, ist das Erstellen einer Ansicht eine Option.
CREATE VIEW v_substring75
WITH SCHEMABINDING
AS
SELECT s.id, s.data, SUBSTRING(data, 7, 5) AS substring75
FROM mytable
CREATE UNIQUE CLUSTERED INDEX UX_substring75_substring_id ON (substring75, id)
SELECT id, data
FROM v_substring75
WHERE substring75 = '12345'