我有一個索引(非聚集)字符串列(我們叫它「標識」)上的表具有以下行值:如何有效地在一個非常大的表中與SQL Server中的某個值最終找到行?
`0000001`
`0000245`
`001`
`AB0001`
我希望能夠高效地返回所有有行以用戶輸入的特定號碼結尾的標識符。例如,當用戶進入1
然後將下面的行應返回: 0000001
001
AB0001
的問題是,使用WHERE Identifier LIKE CONCAT(N'%', @UserInput)
使用索引掃描,其不能很好地擴展,因爲表具有噸的行在它(數以百萬計)
我應該如何有效地查詢這些數據?我首先想到的是添加表示標識符列的REVERSE()
一個新列,然後用WHERE ReversedIdentifier LIKE CONCAT(REVERSE(@UserInput), N'%')
找到使用比賽「開始與」
這似乎並不像乾淨的解決方案,但它就是我現在可以想到。有沒有更好的辦法?
如果用戶輸入' 「5」','應該被0000245'發現?如果用戶輸入「」245「'也應該找到它? – Bohemian
接受的答案,可能沒有太大的幫助。尋找全文索引 – TheGameiswar
我不確定你爲什麼接受這個答案。更好的方法是創建一個具有「REVERSE(標識符)」的計算列。 SQL Server中的計算列可以被索引。然後,你可以LIKE CONCAT(@UserInput,N '%')'計算列 – cha