我正在使用Jquery自动完成功能从SQL Server DB中的Items表加载一些ItemCodes。
项目表包含:项目代码,项目名称,项目描述
我能够自动完成功能,但问题是Items表包含大约230,000条记录,搜索速度较慢。
我已经从第5个字符而不是第2个或第3个字符启用了自动完成功能。然而它仍然很慢..结果在30秒内加载,这是加载自动完成的很长时间。我知道这是由于我正在处理的记录数量。
我能想到的一个想法(可能完全错误)是仅在匹配输入字符串的记录数小于20时才加载下拉列表。
有关如何改善表现的任何建议吗?
修改1
HTML页面:
function SearchText() {
$(".autosuggest").autocomplete({
source: function (request, response) {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "../My_Service.aspx/GetAutoCompleteData",
data: "{'ItemSubStr':'" + document.getElementById( "<%=txtCISearchInput.ClientID%>").value + "'}",
dataType: "json",
success: function (data) {
response(data.d);
},
error: function (result) {
alert("Error");
}
});
}
});
}
在ASP.Net
<WebMethod()> _
Public Shared Function GetAutoCompleteData(ByVal ItemSubStr As String) As List(Of String)
Dim result As New List(Of String)()
If ItemSubStr.Length < 4 Then
Return result
End If
Dim sConnection As String = "XXXXXXXXX"
Using Con As New SqlConnection(sConnection)
Con.Open()
Using Com As New SqlCommand("select distinct ItemCodes from Items where ItemCodes like '%" + ItemSubStr + "%' order by 1", Con)
Using RDR = Com.ExecuteReader()
If RDR.HasRows Then
Do While RDR.Read
result.Add(RDR.Item("ItemCodes").ToString())
Loop
End If
End Using
End Using
Con.Close()
End Using
Return result
End Function