Я проанализировал the code из SqlCommand
и посмотрю, что он отлично работает (см. Метод CompleteExecuteScalar
). Но я не уверен, должен ли я использовать top 1
в запросе. Например, у меня есть select name from Person
, а в таблице Person
содержится много записей. Должен ли я изменить qry на select top 1 name from Person
? Или я могу оставить qry как есть, и это не повлияет на производительность/память и т. Д.? Я боюсь, что сервер может буферизовать некоторые данные перед выходом.Нужно ли положить верх 1 при использовании SqlCommand.ExecuteScalar()
ответ
В запросе обязательно укажите TOP 1
, если вы хотите получить только одну строку из базы данных, независимо от того, передаете ли вы данные через ExecuteScalar
или ExecuteReader
, например.
Вы не должны читать исходный код, чтобы прийти к такому выводу. Фактически, способ, которым управляют, подчиняется инкапсуляции, а вызывающие классы не должны принимать решения на основе точной реализации команды.
Вместо этого я считаю, что база данных представляет собой дефицитный ресурс, который следует оптимально использовать с точки зрения пропускной способности данных и соответствующих мер. Это включает указание в базу данных, что требуется только одна строка, и с ней нужно сделать. Пусть более низкие уровни, такие как реализация команд и сама база данных, показывают, как использовать эту информацию для максимальной производительности.
. Если мне нужна одна запись/значение, я пишу запрос, который возвращает одну запись/значение. Поэтому обычно вместо использования «TOP 1 ... ORDER BY» вы должны использовать условие «WHERE», f.e. 'WHERE ID = @ ID'. –
@TimSchmelter Меня тоже. Вопрос интересный. Я никогда не использовал 'ExecuteScalar', чтобы изолировать только одно поле от одной записи. –
Спасибо большое, просто хотел получить больше очков. Я всегда буду использовать 'top 1' (напишу расширение, чтобы не забыть верх 1). – Serg046
ExecuteScalar
извлекает первое значение столбца первой строки. Таким образом, это не будет иметь значения, если вы добавите TOP 1
к вашему запросу или нет. Тем не менее, рекомендуется добавить TOP 1
, если вы ожидаете повторяющихся значений, и вам нужно это одно значение (ради скорости). Одним из таких правдоподобных сценариев является то, что вы повторно используете какой-либо скрипт, который возвращает набор или строки, содержащие информацию о клиенте конкретного клиента, при условии, что ваш первый столбец является идентификатором CustomerID или любым первичным ключом.
- 1. Нужно ли выравнивать верх и обтекать текст при использовании FPDF?
- 2. SqlCommand.ExecuteScalar Отмена
- 3. Нужно ли добавлять константу при использовании sm.OLS?
- 4. Нужно ли сохранять свойства при использовании мусора?
- 5. Нужно ли проверять root при использовании Branch.io?
- 6. Нужно ли вводить EnterWriteLock при использовании AddHandler?
- 7. Нужно ли использовать «=» при использовании? : javascript shortcut?
- 8. Нужно ли вызывать CoInitialize() при использовании Direct3D9?
- 9. Нужно ли инициализировать COM при использовании ShellExecute()?
- 10. Нужно ли скрывать при использовании класса XmlRootAttribute?
- 11. Нужно ли устанавливать FlushMode.Commit при использовании ITransactions?
- 12. как положить div центр при использовании float
- 13. Visual Studio останавливает отладку при SqlCommand.ExecuteScalar() выполняется
- 14. InvalidOperationException on SqlCommand.ExecuteScalar()
- 15. SqlCommand.ExecuteScalar() возвращается null
- 16. Что мне нужно положить (action = "?")
- 17. Xpath Выбор 1+ узлов при использовании [1]
- 18. Вам нужно положить истечение в JWT?
- 19. получать тот же самый верх 1 результат в SQL сервере
- 20. Нужно ли mysql real escape при использовании таблицы alter?
- 21. Нужно ли создавать статические файлы при использовании webpack?
- 22. Добавление +1 при использовании радиооборудования
- 23. Нужно ли положить Единорог позади Nginx (или Apache)
- 24. Нужно ли положить доллар перед именами переменных с помощью javascript?
- 25. получить довольно JSon из положить при использовании рельсов визуализации
- 26. Нужно ли регистрировать приложение на facebook при использовании социальной структуры?
- 27. Нужно ли блокировать при использовании захваченной переменной в другой резьбе
- 28. Нужно ли указывать тип данных SQL при использовании SqlCommand?
- 29. Нужно ли мне указывать URL-адрес при использовании app.add_url_rule?
- 30. Нужно ли явно выделять память при использовании RollingFileAppender?
Ну, если вам нужно одиночное значение, вам нужно применить условие 'WHERE', которое возвращает одну строку. В противном случае ваш результат будет произвольным. Если вам нужно использовать TOP 1 (с дополнительным ORDER BY), чтобы получить правильное значение, оно не будет более эффективным, чем использование правильного условия WHERE. –
Запрос фильтруется, но он может выводить 0-30 строк. Основываясь на ответе, я буду фильтровать его также сверху 1. – Serg046
Всегда рекомендуется использовать подсказки базы данных, так как тогда он может оптимизировать план запроса. «SELECT TOP 1» - такой намек, который может дать вам лучшую производительность, чем исключить «TOP n» –