我仍然在完全理解SQL Server。我编写了一个存储过程,如下所示:
ALTER PROC [dbo].[Specific_Street_Lookup]
@STR Varchar(50),
@CNT int
AS
BEGIN
SELECT DISTINCT TOP (@CNT)
street_desc, street_localitydesc, postcode_selected
FROM
Full_Streets
INNER JOIN
Postcodes ON Full_Streets.street_postcodeid = postcodes.postcode_id
WHERE
street_desc LIKE @STR+'%'
AND postcode_selected = 'TRUE'
ORDER BY
street_desc, street_localitydesc
END
但返回结果最多可能需要7秒钟,我不知道如何才能加快查询速度。
full_street
表的行数为856800 postcode
表的行数为856208 两个表都有一个主键(street_id
& postcode_id
)
查询的目的:在我的VB.net应用程序中,当用户在街道中输入以查找它时,会返回与部分字符串匹配的多条记录(@CNT
)(LIKE @STR'+%'
)并且仅在postcode_selected = 'TRUE'
我确信必须有更快/更好的方法来做到这一点,我们将不胜感激。
由于
答案 0 :(得分:2)
你可以试试这个索引吗?
CREATE INDEX NCI_street_desc ON Full_Streets(street_desc) INCLUDE(street_localitydesc)
答案 1 :(得分:0)
LIKE运算符在这么大的表中是邪恶的,我不认为你可以用普通索引优化这个查询。
考虑使用全文搜索功能。使用全文搜索,您无法搜索字符串的某些部分(除非您创建一个预先保存字符串所有可能部分的特殊表),但性能远远优于使用LIKE运算符所能实现的性能。 / p>
答案 2 :(得分:0)
我会将postcode_selected列类型更改为bit(TRUE = 1,FALSE = 0),然后相应地修改sp - 这将减少查询的时间复杂度。