我有這樣搜索LEN的用於優化的替代()函數在SQL Server
SELECT firstName
FROM student
WHERE LEN(firstName) > 5
查詢上有「的firstName」列中的非聚集索引。
通常建議不要在WHERE,HAVING等子句中使用帶有列的SQL函數。否則,sql服務器將無法使用索引。
那麼是否有任何替代方法來編寫此查詢,而不使用firstName列上的LEN()?
我有這樣搜索LEN的用於優化的替代()函數在SQL Server
SELECT firstName
FROM student
WHERE LEN(firstName) > 5
查詢上有「的firstName」列中的非聚集索引。
通常建議不要在WHERE,HAVING等子句中使用帶有列的SQL函數。否則,sql服務器將無法使用索引。
那麼是否有任何替代方法來編寫此查詢,而不使用firstName列上的LEN()?
還有其他寫作方法。例如
SELECT firstName
FROM student
WHERE firstName LIKE '_____%'
但這不是索引友好。
儘管您可以創建一個計算列,並使用LEN(firstName)
和索引。
CREATE TABLE student
(
firstName VARCHAR(100),
LenFirstName AS LEN(firstName)
)
CREATE INDEX IX on student(LenFirstName) INCLUDE (firstName)
SELECT firstName
FROM student
WHERE LEN(firstName) > 5
+1 - 對於好的答案:) – Devart
@Martin:除了在表格中創建一個新的計算列之外,沒有別的選擇嗎? –
@DeepakKumarPadhy - 如果您一直對'WHERE LEN(firstName)> 5'感興趣,那麼另一種方法是使用'WHERE'條件創建一個索引視圖,但這樣做不夠靈活。無論如何,您需要多久執行一次這種類型的查詢? –
我不知道這是否會幫助:
;WITH MyCTE AS
(
SELECT FirstName,
LEN(FirstName) AS NameLength
FROM student
)
SELECT FirstName
FROM student
WHERE NameLength > 5
使用CTE可能是一個選項
;WITH CTE AS(
SELECT firstName,
LEN(firstname) AS NameLength
FROM student
)
SELECT firstname
FROM CTE
WHERE NameLength > 5
拉吉
如果'LEN ()'查詢很常見,你可以添加一個計算列到表並索引它。 –