我有这样的查询
SELECT firstName
FROM student
WHERE LEN(firstName) > 5
'firstName' 列上有一个非聚集索引。
通常建议不要在 WHERE、HAVING 等子句中对表的列使用 SQL 函数。否则 sql server 将无法使用索引。
那么是否有任何替代方法来编写此查询而不在 firstName 列上使用 LEN() ?
我有这样的查询
SELECT firstName
FROM student
WHERE LEN(firstName) > 5
'firstName' 列上有一个非聚集索引。
通常建议不要在 WHERE、HAVING 等子句中对表的列使用 SQL 函数。否则 sql server 将无法使用索引。
那么是否有任何替代方法来编写此查询而不在 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
我不知道这是否会有所帮助:
;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
拉吉