【发布时间】:2015-06-26 00:11:08
【问题描述】:
我仍处于完全了解 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 应用程序中,当用户在街道上键入以进行查找时,它会返回与部分字符串 (LIKE @STR'+%') 匹配的许多记录 (@CNT),并且仅当postcode_selected = 'TRUE'
我确信必须有更快/更好的方法来做到这一点,我们将不胜感激。
谢谢
【问题讨论】:
-
您可以为
street_desc和postcode_selected创建索引作为组合索引并尝试查询吗? -
您好 Arindam,感谢您的快速回复。如何创建组合索引?我是通过表设计还是实际在存储过程中做到这一点?
-
右键单击左窗格中的索引选项(通过展开表显示)并为该索引选择那些列,命名并保存,然后重建索引并执行 sp。
-
谢谢,我不想在这里听起来像个白痴,但是当我展开我的邮政编码表时,我有一个 indexes 文件夹,右键单击为我提供了新的索引选项,我可以在其中只选择非聚集索引(其余为灰色)这是正确的吗?出于某种原因,当我在我的 full_streets 表上执行相同的过程并右键单击索引时,新的索引选项是灰色的。知道为什么会这样吗?我以 sa 身份登录。感谢您对此的帮助。
-
哪一列属于哪个表?
标签: sql-server vb.net stored-procedures inner-join