4

我有这样的查询

SELECT firstName
FROM student
WHERE LEN(firstName) > 5

'firstName' 列上有一个非聚集索引。

通常建议不要在 WHERE、HAVING 等子句中对表的列使用 SQL 函数。否则 sql server 将无法使用索引。

那么是否有任何替代方法来编写此查询而不在 firstName 列上使用 LEN() ?

4

3 回答 3

6

有其他的方法来写这个。例如

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

在此处输入图像描述

于 2013-08-12T09:54:06.813 回答
0

我不知道这是否会有所帮助:

;WITH MyCTE AS
(
    SELECT FirstName,      
           LEN(FirstName) AS NameLength
    FROM student
)
SELECT FirstName
FROM   student 
WHERE  NameLength > 5
于 2013-08-12T09:55:49.597 回答
0

使用 CTE 可能是一种选择

;WITH CTE AS(
SELECT firstName, 
       LEN(firstname) AS NameLength
FROM student
)
SELECT firstname
FROM CTE 
WHERE NameLength > 5

拉吉

于 2013-08-12T09:57:09.543 回答