Я обычно использую Entity Framework для своих запросов SQL, что прекрасно, поскольку позволяет динамически создавать запросы строго типизированного и удобного в обслуживании способа.
Однако в данный момент я работаю над проектом, который использует пространственные запросы.,Большинство моих запросов будут выводить порядок набора результатов по времени или расстоянию от заданной координаты.Однако я обнаружил, что упорядочение по STDistance замедляет запрос в 10 раз.(на самом деле это замедляется, если я присоединяюсь к другой таблице в дополнение к «упорядочить по»)
Мне удалось оптимизировать запрос самостоятельно и вернуть производительность обратно туда, где она должна быть, однако этот запрос не можетбыть произведенным Entity Framework.
Таким образом, я мог бы получить набор запросов «порядок по времени», сгенерированный EF, а затем другой набор запросов «порядок по расстоянию» как хранимые процедуры в SQL Server.Проблема в том, что, в основном, этот последний набор запросов должен был бы быть создан с помощью конкатенации строк (либо в SP, либо в C #).
Я пытался уйти от конкатенации строк SQL в течение многих лет иэти платформы ORM отлично подходят для 99% запросов, однако мне всегда приходится возвращаться к конканенации строк, чтобы получать самые оптимальные запросы, отправляемые на сервер.Это кошмар обслуживания, хотя.
Конкатенация строк была решена в ASP.NET с шаблонизаторами, которые, по сути, позволяют создавать строки HTML.Кто-нибудь знает такое решение для строк SQL?Несмотря на то, что в некоторых отношениях это немного неаккуратно, он допускает наиболее оптимальные запросы.На мой взгляд, это было бы лучше, чем
- Конкат строки в сохраненном процессе
- Конкат строки в C #
- Массы дублирующегося кода в хранимых процессах, охватывающие все возможные входныепараметры
- LINQ-запросов, которые могут создавать неоптимальный SQL
Мне бы очень хотелось узнать ваши мысли об этой общей проблеме и что вы думаете о моем предлагаемом решении.
спасибоKris