试图加快SQL查询

时间:2015-04-19 09:25:27

标签: sql-server vb.net stored-procedures inner-join

我仍然在完全理解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'

我确信必须有更快/更好的方法来做到这一点,我们将不胜感激。

由于

3 个答案:

答案 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 - 这将减少查询的时间复杂度。