#jquery #autocomplete #database-performance
#jquery #автозаполнение #база данных-производительность
Вопрос:
Я использую функцию автозаполнения Jquery для загрузки некоторых ItemCodes из таблицы Items в базе данных SQL Server.
Таблица элементов содержит: коды элементов, название элемента, Описание элемента
Я могу запустить функцию автозаполнения, но проблема в том, что таблица элементов содержит около 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
Комментарии:
1. Оптимизируйте код, добавьте индексы к столбцам.
2. взгляните на это pontikis.net/blog/jquery-ui-autocomplete-step-by-step
3. @Justinas: у нас уже есть индекс для требуемого столбца, здесь я отредактировал свой вопрос с кодом, можете ли вы предложить области, где я могу оптимизировать код. Спасибо за ваше время
4. Какие индексы у вас есть в каких столбцах?
5. @Kermani : Я проверил статью mate, в ней рассказывается о создании автозаполнения. В моем случае у меня все заработало, но производительность замедлилась, поскольку в таблице было около 230 000 записей.